powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / доступ к xls и bdf из своей утилитки?
25 сообщений из 46, страница 1 из 2
доступ к xls и bdf из своей утилитки?
    #35530792
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Цель: читать данные из xls и писать в dbf (или в xls).
Написал ТЗ, псевдокод алгоритмов обработки (кроме чтения будут и проверки). Теперь дело осталось за малым - реализовать:)
1. С помощью каких механизмов получить доступ к xls файлам на чтение/запись?
2. С помощью каких механизмов можно получить доступ к dbf файлам на чтение запись?

зы. Интересуюсь механизмами, а не компонентами - предпочитаю ручной труд с++ника... Хотя из-за сроков, чувствую, придется ваять либо на билдере, либо на делфи.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35531741
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще всего не выделываться, а использовать готовые компоненты.

Или еще лучше и правильнее (особенно для DBF) - доступ через ODBC.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35531836
zloy den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bananas
....
зы. Интересуюсь механизмами, а не компонентами - предпочитаю ручной труд с++ника...

Братья Стругацкие, «Понедельник начинается в субботу»На углу двое юношей возились с каким-то механическим устройством. Один убежденно говорил: «Конструкторская мысль не может стоять на месте. Это закон развития общества. Мы изобретем его. Обязательно изобретем. Вопреки бюрократам вроде Чинушина и консерваторам вроде Твердолобова». Другой юноша нес свое: «Я нашел, как применить здесь нестирающиеся шины из полиструктурного волокна с вырожденными аминными связями и неполными кислородными группами. Но я не знаю пока, как использовать регенерирующий реактор на субтепловых нейтронах. Миша, Мишок! Как быть с реактором?» Присмотревшись к устройству, я без труда узнал велосипед.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35531943
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,
zloy den
:)

Пожалуй. Я тут уже OLE собирался изучать. Просто времени нет рассусоливать. Краем глаза ужватил, что для для билдера есть TMS-components. Работали с ними? В xls может быть очень много записей (штука), так что нужна скорость.
Для dbf значит через одбц работать? Там тоже записей дофига будет (справочники). Прога будет брать определенные поля из эксельника и проверять, есть ли такие в справочниках.
Так что важна скорость.

Работа проги:
1. Подключилась к xls;
2. Взяла из него значение контрольных полей первой записи и положила к себе в буфер;
3. Подключилась к справочникам;
4. Взяла из них значение полей первой записи для сравнения и положила к себе в буфер;
5. Сравнила: если значения совпадают, то: взять из xls файла соответствующую строку и записать ее в словари.

И так в цикле. Определение количества итераций, процесс записи в dbf - не брал, чтоб не отвлекать от основного цикла.
Соответственно нужны компоненты для пдключения к xls файлу, быстрый парсинг и чтение.
Прочитал про какой-то эксел-сервер. Мне нужно напрямую подключаться к файлу + если сравнение неуспешное, дать возможность пользователю открыть нужную запись и отредактировать с сохранением. Открыть: думаю просто загрузить проблемную запись в грид.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35532025
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПандемДевчонка укусила яблоко, поправила выбивающуюся из-под шлема косу и потрусила к странному сооружению, ожидающему ее на дорожке. Это было нечто вроде большого колеса с сиденьем внутри, со сложной системой приводов и противовесов, с красным флажком на руле (а у сооружения был руль). Виталька присмотрелся. "Сделала сама", - гласила гордая надпись на флажке.
Он подошел к барьерчику и стал смотреть.
Да, местные ребятишки преуспели. Одних велосипедов было десять разновидностей. Педальные ползуны, ходульные самоступы, хитрые транспортные приспособления, чей вид одновременно смешил и вызывал уважение; половина изобретений гордилась красным флажком "Сделал сам", прочие были маркированы синими флажками ("Подсказка Пандема") и желтыми флажками ("Помощь Пандема"). Все это ездило по зеленому полю, маневрировало и сигналило, желая показаться во всей красе. Трибуны полны были восхищенными родителями.
- А что, эта мелочь с косичкой действительно совсем сама построила эту штуку? - вслух спросил Виталька. Все равно за шумом стадиона его никто не слышал.
"Не только построила, но и придумала сама... Женечка Усова, десять лет. Хочешь познакомиться?"
- Нет, - быстро сказал Виталька. - Толку в ее изобретении... так, баловство. Тем более что ты все это знал заранее - еще до того, как она...
"Да, знал. Ну и что? У них самостоятельные мозги, они гордятся тем, что кое-что умеют сами. И они правы".
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35532235
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmo
Отрывок понравился, если найду - куплю. Только к теме это не относится. Я за помощью пришел.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35532607
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так уже посоветовали - если нужна скорость - юзай ODBC-драйвера для Excel и VFP,
они сейчас в любой Винде идут комплектом, так что тебе только нужно изучить
соответствующий функционал среды разработки...
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35532640
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BananasmaXmo
Отрывок понравился, если найду - куплю. Только к теме это не относится. Я за помощью пришел.

> ... предпочитаю ручной труд с++ника...

Ну тогда, самое простое взять фрагменты работы с DBF отсюда: http://dl.maptools.org/dl/shapelib/
Компактно, просто.

Про Ёксель - это сложнее. Читать - можно юзать это: http://sourceforge.net/project/showfiles.php?group_id=36740
Писать XLS тоже можно, но лень объяснять.

ЗЫ: Чем мог - помог :)
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35535640
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_x BananasmaXmo
Отрывок понравился, если найду - куплю. Только к теме это не относится. Я за помощью пришел.

> ... предпочитаю ручной труд с++ника...

Ну тогда, самое простое взять фрагменты работы с DBF отсюда: http://dl.maptools.org/dl/shapelib/
Компактно, просто.

Про Ёксель - это сложнее. Читать - можно юзать это: http://sourceforge.net/project/showfiles.php?group_id=36740
Писать XLS тоже можно, но лень объяснять.

ЗЫ: Чем мог - помог :)
Спасибо за ссылки. Хочу уточниться относительно эксела:
1. Если работать через ole, на таблице с большим количеством записей выборка сильно будет тормозить в сравнении с odbc?
2. Если работать через ole, то нужен установленный эксел. Его загружать полностью, с отображением окна или можно просто процесс в память загрузить без отображения?
3. Если эксель файлы разных версий (2003, 2007), это имеет значение для работы через ole и odbc? Нужно считывать только текстовую информацию из таблички (текст, числа целые, с плавающей точкой).
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35537233
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bananas1. Если работать через ole, на таблице с большим количеством записей выборка сильно будет тормозить в сравнении с odbc?
2. Если работать через ole, то нужен установленный эксел. Его загружать полностью, с отображением окна или можно просто процесс в память загрузить без отображения?
3. Если эксель файлы разных версий (2003, 2007), это имеет значение для работы через ole и odbc? Нужно считывать только текстовую информацию из таблички (текст, числа целые, с плавающей точкой).
1) Чем больше данных, тем больше торможение в любом случае. Но с ОЛЕ, действительно будет медленнее.
2) Да, для ОЛЕ нужен Эксель. Нет, можно работать без показа Экселя на экране.
3) Разница в версиях ощущается всегда. Но в ОЛЕ с этим чуть-чуть проще на мой взгляд, там можно узнать какая именно версия Экселя у тебя запустилась и переключиться на специфичную для этой версии работу. Простое чтение из ячеек такого обычно не требует.
Ты забыл еще один пункт:
4) Через ОЛЕ ты просто обращаешься к ячейкам листа.
А через ОДБЦ, твой лист превращается в таблицу, но какие в этой таблице будут колонки и какой тип будет у этих колонок зависит от данных на листе. То есть, если кто-то запишет в колонку "Цифра Месяца" текстом "январь", то ОДБЦ-Эксель посчитает эту колонку текстовой и если ты ожидал получить цифру.... И наоборот тоже справедливо. Плюс еще количество строк которые ОДБЦ-Эксель проверяет чтобы решить какого типа колонку сделать может различаться на разных машинах...
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35537585
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Ты забыл еще один пункт:
4) Через ОЛЕ ты просто обращаешься к ячейкам листа.
А через ОДБЦ, твой лист превращается в таблицу, но какие в этой таблице будут колонки и какой тип будет у этих колонок зависит от данных на листе. То есть, если кто-то запишет в колонку "Цифра Месяца" текстом "январь", то ОДБЦ-Эксель посчитает эту колонку текстовой и если ты ожидал получить цифру.... И наоборот тоже справедливо. Плюс еще количество строк которые ОДБЦ-Эксель проверяет чтобы решить какого типа колонку сделать может различаться на разных машинах...
Да, этот вопрос существенный. В принципе, структура таблицы стандартная, со всеми полями и типами данных, которые в них храняться. В принципе, хотя про жесткость обеспечения этих организационных мер на все 100 не уверен.
Придется проверку на каждую ячейку делать.
1. Работа через одбц - работа через SQL?
2. Про "тип колонок зависит от данных на листе". В экселе хранятся типы данных для каждой ячейки или для всего столбца? При работе через ole тип ячейки можно получить, я так полагаю. А если через odbc? Тип определить нельзя и только через прогон по функциям проверки, чтоже там: текст, цифры и прочее? По умолчанию тип всех столбцов - текст?
3. Файл состоит не только из таблицы - есть и заголовок. Как определить смещение, с которого начинается сама таблица (мыслю все в ole)?
4. Как сравнить некоторые ячейки из всей строки? В ole привычно, по позиции, а через SQL? Прежде, чем переносить всю строку в dbf, мне нужно сначала проверить ее правильность. Т.е. Есть ИНН и наименование плательщика. В dbf хранятся все ИНН и соответствующие им плательщики. Я беру из эксела и dbf эти поля и сравниваю.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35537666
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bananas Т.е. Есть ИНН и наименование плательщика. В dbf хранятся все ИНН и соответствующие им плательщики. Я беру из эксела и dbf эти поля и сравниваю.
Так давайте уж определимся с ТЗ. А то все не о том. В чем проблема-то? Сверить список из Экзеля с таблицей в Dbase?

Вообще, разговор о С++ как-то не по теме. Есть Экзель. Есть приложение, где созданы эти DBF (наверняка Фокс).
Не изобретайте... впрочем, про велосипед уже было. СтОит еще Оккама вспомнить - ну зачем нам еще С++ цеплять?

Давайте сделаем проще, например на том же самом VB (или вообще на VBA).
Коннект на DBF. Пробегаем по списку Экзеля и пишем данные через запрос в рекордсет.
Результат сравнения с рекордсетом - пишем в другой список. Экспортируем полученное.

Или вообще сразу строим join и получаем результат.

Или давайте сделаем в VFP. Справочники подключим как внешние таблицы.
Импортируем из Экзеля таблицу. Сделаем выборку. Результат - уже готов.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35538825
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM
Давайте сделаем проще, например на том же самом VB (или вообще на VBA).
Коннект на DBF. Пробегаем по списку Экзеля и пишем данные через запрос в рекордсет.
Результат сравнения с рекордсетом - пишем в другой список. Экспортируем полученное.

Или вообще сразу строим join и получаем результат.

Или давайте сделаем в VFP. Справочники подключим как внешние таблицы.
Импортируем из Экзеля таблицу. Сделаем выборку. Результат - уже готов.
Эксельный файл не один, их много. Структура таблицы стандартна, но файл не один. Поэтому я и не говорил о скриптах в эксельнике - невозможно сделать, файл приходят из разных источников. Можно конечно разослать всем пользователям эксельник со скриптами, и обязать, чтоб через него работали. Но вариант мне не нравится.
Прога будет как автоматизатор: открыл, подключил все источники, запустил. Она сама перенесет все данные из экселя в dbf. Если возникнет несовпадение со словарями - предложет пользователю исправить (прям в прогу вкручу стригнгрид). Никаких других прог запускаться не должно - иначе эффект от автоматизации будет маленький.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35540581
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bananas1. Работа через одбц - работа через SQL?Да
Bananas2. Про "тип колонок зависит от данных на листе". В экселе хранятся типы данных для каждой ячейки или для всего столбца? При работе через ole тип ячейки можно получить, я так полагаю. А если через odbc? Тип определить нельзя и только через прогон по функциям проверки, чтоже там: текст, цифры и прочее? По умолчанию тип всех столбцов - текст?В Экселе каждая ячейка может быть своего типа. А в базах данных (и в ODBC как в интерфейсе доступа к базам данных) тип задается для всей колонки данных. Поэтому Эксель при попытке доступа к листу через ODBC проверяет тип первых восьми ячеек в колонке, находит для этих ячеек общий тип данных и заявляет что эта колонка такого-то жесткого типа. Если в дальнейшем на листе попадаются ячейки с данными другого типа - они будут игнорированны (представленны как null то есть).
Первые восемь ячеек это по умолчанию в свежепоставленном офисе, это значение хранится в регистри и его можно поменять. Но естественно, это будет для каждой машины по своему.
Bananas3. Файл состоит не только из таблицы - есть и заголовок. Как определить смещение, с которого начинается сама таблица (мыслю все в ole)?Ты знаешь какие у тебя заголовки? Просто ищешь в известной колонке ячейку с известным текстом. Можешь потом для верности проверить что в ячейках на той же строке находятся другие известные заголовки. А найдя строку заголовков найти массив данных уже совсем элементарно.
Bananas4. Как сравнить некоторые ячейки из всей строки? В ole привычно, по позиции, а через SQL? Прежде, чем переносить всю строку в dbf, мне нужно сначала проверить ее правильность. Т.е. Есть ИНН и наименование плательщика. В dbf хранятся все ИНН и соответствующие им плательщики. Я беру из эксела и dbf эти поля и сравниваю.А в SQL по имени колонки.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35541780
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BananasЭксельный файл не один, их много. Структура таблицы стандартна, но файл не один. Поэтому я и не говорил о скриптах в эксельнике - невозможно сделать, файл приходят из разных источников. Можно конечно разослать всем пользователям эксельник со скриптами, и обязать, чтоб через него работали. Но вариант мне не нравится.
Прога будет как автоматизатор: открыл, подключил все источники, запустил. Она сама перенесет все данные из экселя в dbf. Если возникнет несовпадение со словарями - предложет пользователю исправить (прям в прогу вкручу стригнгрид). Никаких других прог запускаться не должно - иначе эффект от автоматизации будет маленький.
Чего? Вы хоть смотрели, как работает ODBC (или ADODB)? Выложить пример?
Или сразу написать обработку "с кучей XLS одной структуры", с отдельным "автоматизатором" и экспортом в DBF?
Или дадите примеры файлов исходников?
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35559985
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM
Чего? Вы хоть смотрели, как работает ODBC (или ADODB)? Выложить пример?
Или сразу написать обработку "с кучей XLS одной структуры", с отдельным "автоматизатором" и экспортом в DBF?

Пример смотрел, но не понял к чему он. Мне показалось, или вы пытались меня задеть? Да, опыта серьезного программирования у меня нет, пэтому я и обращаюсь с такими вопросами за помощью.
По этой же причине выбрал С++.
Опять же, по этой причине, сделаю первую версию через ole (много статей интересных нашел).
В одной прямо структура объектов эксельника дана: приложение, книга, лист, массив ячеек.
Теперь по делу: во всех примерах эксельник создается (CreateOleObject), а как быть, когда файл уже создан и к нему нужно просто подключиться?
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35560819
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bananas AndreTM
Чего? Вы хоть смотрели, как работает ODBC (или ADODB)? Выложить пример?
Или сразу написать обработку "с кучей XLS одной структуры", с отдельным "автоматизатором" и экспортом в DBF?

Пример смотрел, но не понял к чему он. Мне показалось, или вы пытались меня задеть?
Нет, не пытался... Просто вырвалось...
А пример - показывает получение данных из разных источников. Прикрутить его функционал для импорта-экспорта совсем несложно.

Мы Вам просто объясняем, что достаточно было выложить тестовый пример из нескольких коротеньких файлов, показывающих исходные данные и результат.

После этого намного проще было бы посоветовать, чем и как воспользоваться для решения.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35561223
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM
Мы Вам просто объясняем, что достаточно было выложить тестовый пример из нескольких коротеньких файлов, показывающих исходные данные и результат.

После этого намного проще было бы посоветовать, чем и как воспользоваться для решения.
Образец xls-источника у меня есть. Словарей и результирующего dbf-файла пока нет - сначала эксель пытаюсь прикрутить. Постараюсь сделать dbfники cегодня.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35565990
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До dbf руки так и не дошли.
1. В Билдере 6 есть вкладка Office2k, там естьTExcelApplication. Я так понял это обертка над оле?
2. Затык с самим оле. Подключил comobj.hpp, удалось создать только эксземпляр эксела:
авторVariant Excel;
Excel=CreateOleObject("Excel.Application");
Какой камандой подгрузить в этот экземпляр xls-файл? Читал у оле якобы есть команда Open, но ее нет.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35565998
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может какой заголовочник не добавил?
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35567349
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не в заголовочниках дело.
Код: plaintext
1.
2.
3.
4.
5.
6.
Variant myExcel, myWorkBook, myWorkSheet, myCell;
  myExcel = CreateOleObject("Excel.Application");
  myWorkBook=myExcel.OlePropertyGet("WorkBooks");
  myWorkBook.OleProcedure("Add");
  myWorkBook.OleProcedure("Open", "C:\_buf_.xls");
  myExcel.OlePropertySet("Visible", true);
Выдает ошибку: Debugging Exception Notification: Project Project1.exe raised exception class EOleSysError with message 'Ошибка'...
Я неправильно загрузил файл?
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35567607
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на какой именно инструкции эксепшн валится?
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35568084
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychна какой именно инструкции эксепшн валится?
На
Код: plaintext
myWorkBook.OleProcedure("Open", "C:\_buf_.xls");
Но с этим разобрался. Вместо одного слеша надо было ставить двойной.
Код: plaintext
myWorkBook.OleProcedure("Open", "C:\\_buf_.xls");
Теперь наконец-то файл открывается!
Сейчас другая загвоздка: тип ячейки. Незнаю, как его получить. Что-то вроде:
Код: plaintext
AnsiString p=myCell.OlePropertyGet("Item", 3 , 14 ,"type");
Пишет Недопустимое количество параметров.
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35568336
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по форуму С++ поищите - было 1000 раз как с Excel'ем из стройки работать
...
Рейтинг: 0 / 0
доступ к xls и bdf из своей утилитки?
    #35576783
Bananas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С основными моментами экселя разобрался.
Вопрос:
Как определить тип ячейки эксел файла? Конкретно какая инфа в нем хранится - мне известно, но нужно проверить? В поиске нашел только одну тему, но по делфи. Там говорят, нужно проверять по всем типам.
Как написать нечто такого:
Код: plaintext
1.
2.
3.
4.
// подключил эксел в Variant p;
//загрузил в него файл
Variant cell1=Excel.OlePropertyGet("Item", 1 , 1 ).OlePropertyGet("NumberType");
if(cell1.VType=="@") //...
...
Рейтинг: 0 / 0
25 сообщений из 46, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / доступ к xls и bdf из своей утилитки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]