Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 06:28
Оценка:
Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.

Таблица в Excel'е порядка 200 — 300 строк. Если просто сканировать ячейки, можно сдохнуть пока он закончит (~ 20 мин.).

Хочу спросить, есть ли способ ускориться?
Использую раннее связывание.

Спасибо заранее.

(Работаю в CBuilder'e, но и дельфиские советы сойдут )
Счастье — это Glück!
Re: Как ускорить работу с Excel через OLE?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.09.02 07:38
Оценка:
Здравствуйте DYM, Вы писали:

DYM>Хочу спросить, есть ли способ ускориться?

http://www.rsdn.ru/forum/Message.aspx?mid=86249&only=1
Автор: Anatolix
Дата: 17.08.02
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[2]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 07:46
Оценка:
Здравствуйте Anatolix, Вы писали:

A>http://www.rsdn.ru/forum/Message.aspx?mid=86249&only=1
Автор: Anatolix
Дата: 17.08.02


К сожалению это не решает мою задачу.
Клиент хочет иметь Excel в качестве интетфеса
пользователя для ввода данных, а как известно клиент всегда прав
Счастье — это Glück!
Re: Как ускорить работу с Excel через OLE?
От: Сергей Лисовский  
Дата: 13.09.02 09:01
Оценка:
Здравствуйте 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 и т. д.

Если получится — дай знать, pls.
Сергей.
Re: Как ускорить работу с Excel через OLE?
От: TATAPuH США  
Дата: 13.09.02 09:23
Оценка:
Здравствуйте DYM, Вы писали:

DYM>Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.


DYM>Таблица в Excel'е порядка 200 — 300 строк. Если просто сканировать ячейки, можно сдохнуть пока он закончит (~ 20 мин.).


DYM>Хочу спросить, есть ли способ ускориться?

DYM>Использую раннее связывание.

DYM>Спасибо заранее.


DYM>(Работаю в CBuilder'e, но и дельфиские советы сойдут )


как вариант — написать маленький модуль на VBA в екселе чтобы он бежал по ячейками и сохранял всё что может понадобиться напирмер в XML
далее уже полученный файл разбираешь в билдере — будет напорядок быстрее чем твои 20ть минут
Re[3]: Как ускорить работу с Excel через OLE?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.09.02 10:24
Оценка:
Здравствуйте DYM, Вы писали:

DYM>Здравствуйте Anatolix, Вы писали:


A>>http://www.rsdn.ru/forum/Message.aspx?mid=86249&only=1
Автор: Anatolix
Дата: 17.08.02


DYM>К сожалению это не решает мою задачу.

DYM>Клиент хочет иметь Excel в качестве интетфеса
DYM>пользователя для ввода данных, а как известно клиент всегда прав

Встраивай COM сервер в свою программу, и из excel его вызови и впихни данные, будет совсем быстро.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[2]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 11:45
Оценка:
Здравствуйте Сергей Лисовский, Вы писали:

СЛ>Сразу предупреждаю — сам так не делал, но на первый взгляд препятствий не вижу


СЛ>План действий примерно такой.

СЛ>Создаешь у себя массив вариантов (я думаю, его размеры нетрудно будет узнать ).
СЛ>Закачиваешь в него ячейки из Excel'я. По крайней мере, когда надо в Excel записать, простое присваивание Range.Value := _val_array_ срабатывает. Возможно, сработает и в обратную сторону.
СЛ>Дальше работаешь с элементами массива как с ячейками. Как-нить так:

СЛ>
СЛ>_val_array_[i,j] as Cell; // или Range
СЛ>


СЛ>А у Cell (Range) есть всякие нужные св-ва — Borders, Font, Text и т. д.


СЛ>Если получится — дай знать, pls.


Кричит: EVariantError
Пытаюсь побороть
Счастье — это Glück!
Re[2]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 11:47
Оценка:
Здравствуйте TATAPuH, Вы писали:

TAT>как вариант — написать маленький модуль на VBA в екселе чтобы он бежал по ячейками и сохранял всё что может понадобиться напирмер в XML

TAT>далее уже полученный файл разбираешь в билдере — будет напорядок быстрее чем твои 20ть минут

А чем отличается макрос на VBA от моей проги работающей через OLE.
Счастье — это Glück!
Re[4]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 11:48
Оценка:
Здравствуйте Anatolix, Вы писали:

A>Встраивай COM сервер в свою программу, и из excel его вызови и впихни данные, будет совсем быстро.


Что знаит встраивай?
Счастье — это Glück!
Re[3]: Как ускорить работу с Excel через OLE?
От: TATAPuH США  
Дата: 13.09.02 12:17
Оценка:
Здравствуйте DYM, Вы писали:

DYM>А чем отличается макрос на VBA от моей проги работающей через OLE.


наверно ничем — кроме того что
1. будет написанно не на Delphi (ничего против Delphi не имею )
2. не будет использовать OLE (хотя это не аргумент)
3. будет работать быстрее
4. сможите вызывать своб "программу" (хотя затрудняюсь это ноазвать программой) прямо из Екселя
5.
6.
...

а вообще если пытаться оценивать различные подходы к задаче с точки зрения скорости или ещё чего надо более точно вашу задачу
DYM>Мне необходимо разобрать Excel-документ (ну допустим "Отчет о движении денежных средств") и поместить информацию о каждой ячейке (шрифт и его атрибуты, цвет заливки, цвет рамки, значение в ячейке) в текстовый файл.

имхо недостаточно (надо к примеру вам сохранять формулы из ячеек ? или только значение или и то и другое ? )
Re[4]: Как ускорить работу с Excel через OLE?
От: TATAPuH США  
Дата: 13.09.02 12:22
Оценка:
P.S.

в предыдущем сообщение Delphi следует читать как C++ Builder (какой он там у вас версии)
просто постоянно приходиться писать то на на одном то на другом поэтому они у меня как то асоциируються с друг другом (просто Borland)
Re[4]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 12:27
Оценка:
Здравствуйте TATAPuH, Вы писали:


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. цвет ячейки
Счастье — это Glück!
Re[5]: Как ускорить работу с Excel через OLE?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.09.02 12:35
Оценка:
Здравствуйте DYM, Вы писали:

DYM>Здравствуйте Anatolix, Вы писали:


A>>Встраивай COM сервер в свою программу, и из excel его вызови и впихни данные, будет совсем быстро.


DYM>Что знаит встраивай?


Добавляешь Automation сервер в свою программу и общаешься с ним из VB
Пример:
http://www.softforum.ru/news.exe?cmd=article&group=cps.borland.cbuilder.faq&item=30&utag=
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[5]: Как ускорить работу с Excel через OLE?
От: TATAPuH США  
Дата: 13.09.02 12:49
Оценка:
Здравствуйте 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 и делай потом с ним чего хошь
Re[6]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 13:01
Оценка:
Здравствуйте TATAPuH, Вы писали:

TAT>всё равно пока непонятно — почему бы тогда не сохронять документ в WebPage *.htm файл и не называть его текстовым — (кстати файл получаеться достоточно простой для его разбора — хотя канешноже минус в том что разные ексели (версии) будут по разному форматировать выходный файл)


это большой минус
Вы видели этот HTML. Помоему он вообще не подлежит разбору

TAT>P.S. кстати Excel XP — умеет сохронять в нормальный человечячий XML и делай потом с ним чего хошь

в том-то и дело, что приложение не должно зависеть от версии и локализации Excel.

TAT>P.S. кстати Excel XP — умеет сохронять в нормальный человечячий XML и делай потом с ним чего хошь

XML и XP — хорошее дело, но у клиентов до этого далеко, у них еще Win'95 встречается и 100-е пентюхи.
Счастье — это Glück!
Re[6]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 13:05
Оценка:
Здравствуйте 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=

Интересный способ, попробую...но уж как-то извращенно...
Только макросов быть не должно (это условие заказчика)
Счастье — это Glück!
Re[7]: Как ускорить работу с Excel через OLE?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 13.09.02 13:28
Оценка: 2 (1)
Здравствуйте DYM, Вы писали:

DYM>Интересный способ, попробую...но уж как-то извращенно...

DYM>Только макросов быть не должно (это условие заказчика)

А их можно на ходу генерить, запихнул ему макрос, запустил, потом стер.
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[8]: Как ускорить работу с Excel через OLE?
От: DYM Россия  
Дата: 13.09.02 13:32
Оценка:
Здравствуйте Anatolix, Вы писали:

A>А их можно на ходу генерить, запихнул ему макрос, запустил, потом стер.

да видимо придется
спасибо
Счастье — это Glück!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.