Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.
Таблица в Excel'е порядка 200 — 300 строк. Если просто сканировать ячейки, можно сдохнуть пока он закончит (~ 20 мин.).
Хочу спросить, есть ли способ ускориться?
Использую раннее связывание.
Спасибо заранее.
(Работаю в CBuilder'e, но и дельфиские советы сойдут )
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте DYM, Вы писали:
DYM>Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.
DYM>Таблица в Excel'е порядка 200 — 300 строк. Если просто сканировать ячейки, можно сдохнуть пока он закончит (~ 20 мин.).
DYM>Хочу спросить, есть ли способ ускориться? DYM>Использую раннее связывание.
Сразу предупреждаю — сам так не делал, но на первый взгляд препятствий не вижу
План действий примерно такой.
Создаешь у себя массив вариантов (я думаю, его размеры нетрудно будет узнать ).
Закачиваешь в него ячейки из Excel'я. По крайней мере, когда надо в Excel записать, простое присваивание Range.Value := _val_array_ срабатывает. Возможно, сработает и в обратную сторону.
Дальше работаешь с элементами массива как с ячейками. Как-нить так:
_val_array_[i,j] as Cell; // или Range
А у Cell (Range) есть всякие нужные св-ва — Borders, Font, Text и т. д.
Здравствуйте DYM, Вы писали:
DYM>Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.
DYM>Таблица в Excel'е порядка 200 — 300 строк. Если просто сканировать ячейки, можно сдохнуть пока он закончит (~ 20 мин.).
DYM>Хочу спросить, есть ли способ ускориться? DYM>Использую раннее связывание.
DYM>Спасибо заранее.
DYM>(Работаю в CBuilder'e, но и дельфиские советы сойдут )
как вариант — написать маленький модуль на VBA в екселе чтобы он бежал по ячейками и сохранял всё что может понадобиться напирмер в XML
далее уже полученный файл разбираешь в билдере — будет напорядок быстрее чем твои 20ть минут
DYM>К сожалению это не решает мою задачу. DYM>Клиент хочет иметь Excel в качестве интетфеса DYM>пользователя для ввода данных, а как известно клиент всегда прав
Встраивай COM сервер в свою программу, и из excel его вызови и впихни данные, будет совсем быстро.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте Сергей Лисовский, Вы писали:
СЛ>Сразу предупреждаю — сам так не делал, но на первый взгляд препятствий не вижу
СЛ>План действий примерно такой. СЛ>Создаешь у себя массив вариантов (я думаю, его размеры нетрудно будет узнать ). СЛ>Закачиваешь в него ячейки из Excel'я. По крайней мере, когда надо в Excel записать, простое присваивание Range.Value := _val_array_ срабатывает. Возможно, сработает и в обратную сторону. СЛ>Дальше работаешь с элементами массива как с ячейками. Как-нить так:
СЛ>
СЛ>_val_array_[i,j] as Cell; // или Range
СЛ>
СЛ>А у Cell (Range) есть всякие нужные св-ва — Borders, Font, Text и т. д.
СЛ>Если получится — дай знать, pls.
Здравствуйте TATAPuH, Вы писали:
TAT>как вариант — написать маленький модуль на VBA в екселе чтобы он бежал по ячейками и сохранял всё что может понадобиться напирмер в XML TAT>далее уже полученный файл разбираешь в билдере — будет напорядок быстрее чем твои 20ть минут
А чем отличается макрос на VBA от моей проги работающей через OLE.
Здравствуйте DYM, Вы писали:
DYM>А чем отличается макрос на VBA от моей проги работающей через OLE.
наверно ничем — кроме того что
1. будет написанно не на Delphi (ничего против Delphi не имею )
2. не будет использовать OLE (хотя это не аргумент)
3. будет работать быстрее
4. сможите вызывать своб "программу" (хотя затрудняюсь это ноазвать программой) прямо из Екселя
5.
6.
...
а вообще если пытаться оценивать различные подходы к задаче с точки зрения скорости или ещё чего надо более точно вашу задачу DYM>Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.
имхо недостаточно (надо к примеру вам сохранять формулы из ячеек ? или только значение или и то и другое ? )
в предыдущем сообщение Delphi следует читать как C++ Builder (какой он там у вас версии)
просто постоянно приходиться писать то на на одном то на другом поэтому они у меня как то асоциируються с друг другом (просто Borland)
DYM>>А чем отличается макрос на VBA от моей проги работающей через OLE.
TAT>наверно ничем — кроме того что TAT>1. будет написанно не на Delphi (ничего против Delphi не имею )
на CBuildere
TAT>2. не будет использовать OLE (хотя это не аргумент)
а что он будет использовать? помоему VBA действует также через OLE.
TAT>3. будет работать быстрее TAT>4. сможите вызывать своб "программу" (хотя затрудняюсь это ноазвать программой) прямо из Екселя
как раз д.б. наоборот. Клиенты начинают "бится в истерике", если видят запрос на отключение макросов.
но это не принципиально, я могу записать макрос через тотже OLE и запустить его.
TAT>а вообще если пытаться оценивать различные подходы к задаче с точки зрения скорости или ещё чего надо более точно вашу задачу DYM>>Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.
TAT>имхо недостаточно (надо к примеру вам сохранять формулы из ячеек ? или только значение или и то и другое ? )
надо сохранять:
1. Шрифт,
2. его размер,
3. название,
4. Выравнивание по горизонтали
5. отступ
6. значение в ячейке или формула (в зависимости от того, что там)
7. рамка
8. цвет ячейки
Здравствуйте DYM, Вы писали:
DYM>Здравствуйте Anatolix, Вы писали:
A>>Встраивай COM сервер в свою программу, и из excel его вызови и впихни данные, будет совсем быстро.
DYM>Что знаит встраивай?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте DYM, Вы писали:
TAT>>имхо недостаточно (надо к примеру вам сохранять формулы из ячеек ? или только значение или и то и другое ? ) DYM>надо сохранять: DYM>1. Шрифт, DYM>2. его размер, DYM>3. название, DYM>4. Выравнивание по горизонтали DYM>5. отступ DYM>6. значение в ячейке или формула (в зависимости от того, что там) DYM>7. рамка DYM>8. цвет ячейки
всё равно пока непонятно — почему бы тогда не сохронять документ в WebPage *.htm файл и не называть его текстовым — (кстати файл получаеться достоточно простой для его разбора — хотя канешноже минус в том что разные ексели (версии) будут по разному форматировать выходный файл)
P.S. кстати Excel XP — умеет сохронять в нормальный человечячий XML и делай потом с ним чего хошь
Здравствуйте TATAPuH, Вы писали:
TAT>всё равно пока непонятно — почему бы тогда не сохронять документ в WebPage *.htm файл и не называть его текстовым — (кстати файл получаеться достоточно простой для его разбора — хотя канешноже минус в том что разные ексели (версии) будут по разному форматировать выходный файл)
это большой минус
Вы видели этот HTML. Помоему он вообще не подлежит разбору
TAT>P.S. кстати Excel XP — умеет сохронять в нормальный человечячий XML и делай потом с ним чего хошь
в том-то и дело, что приложение не должно зависеть от версии и локализации Excel.
TAT>P.S. кстати Excel XP — умеет сохронять в нормальный человечячий XML и делай потом с ним чего хошь
XML и XP — хорошее дело, но у клиентов до этого далеко, у них еще Win'95 встречается и 100-е пентюхи.
Здравствуйте Anatolix, Вы писали:
A>Здравствуйте DYM, Вы писали:
DYM>>Здравствуйте Anatolix, Вы писали:
A>>>Встраивай COM сервер в свою программу, и из excel его вызови и впихни данные, будет совсем быстро.
DYM>>Что знаит встраивай?
A>Добавляешь Automation сервер в свою программу и общаешься с ним из VB A>Пример: A>http://www.softforum.ru/news.exe?cmd=article&group=cps.borland.cbuilder.faq&item=30&utag=
Интересный способ, попробую...но уж как-то извращенно...
Только макросов быть не должно (это условие заказчика)
Здравствуйте DYM, Вы писали:
DYM>Интересный способ, попробую...но уж как-то извращенно... DYM>Только макросов быть не должно (это условие заказчика)
А их можно на ходу генерить, запихнул ему макрос, запустил, потом стер.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев