Здравствуйте DYM, Вы писали:
DYM>Интересный способ, попробую...но уж как-то извращенно... DYM>Только макросов быть не должно (это условие заказчика)
А их можно на ходу генерить, запихнул ему макрос, запустил, потом стер.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Мне необходимо разобрать 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=
Интересный способ, попробую...но уж как-то извращенно...
Только макросов быть не должно (это условие заказчика)