Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ускорение заполнения таблицы в MS Word, "Поячеечное" заполнение низкоскоростное 
:(
    Опции темы
Saddam
Дата 1.11.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.10.2007

Репутация: нет
Всего: нет



Добрый день, проблема вот в чем...

Существует шаблон документа Word, в котором есть "шапка таблицы" какого угодно строения, но последняя строчка шапки заполнена текстовыми метками, обозначающими какие данные должны быть занесены в эти столбцы.

В Delphi сформирован объект (коллекция) содержащая номера строк и столбцов таблицы документа Word и значения, которые должны быть туда помещены. На данный момент вставка значений осуществляется поячеечно, то есть берется ячейка таблицы по номеру строки и столбца, туда кладется текст с помощью свойства Table.Cell.Range.Text, и так далее. Если ячеек в таблице несколько сотен, этот процесс занимает долгое время. Крайне необходимо этот процесс ускорить.

По поводу метода ConvertToTable - он не подходит из-за того, что полученная табличка в результате конвертации может иметь лишь строго определенную ширину столбцов, либо отформатирована по ширине, либо по значениям ячеек. А мне нужно, чтобы она соответствовала "шапке" таблицы, которая изначально имеется в шаблоне.

Жаль, что нет у таблиц ворда свойства Cells,  и нельзя передать сразу вариантный массив значений...

Есть ли у кого-нибудь соображения насчет этой проблемы? 
PM MAIL   Вверх
Albinos_x
Дата 2.11.2007, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



Цитата(Saddam @  1.11.2007,  12:01 Найти цитируемый пост)
Жаль, что нет у таблиц ворда свойства Cells,  и нельзя передать сразу вариантный массив значений...

есть и Range... по пробуй с ним поиграться...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Saddam
Дата 12.11.2007, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.10.2007

Репутация: нет
Всего: нет



Проблема решена, хотя и не совсем так, как хотелось бы.

Для ускорения операций я был вынужден загружать в фоновом режиме еще и Excel, в памяти формировать прямоугольный вариантный массив, соответствующий табличке и передавать его за одну операцию в Excel:

Код

 Range := XLApp.Range[XLApp.Cells.Item[1,1],XLApp.Cells.Item[MaxR,MaxC]];
 Range.Value := ArrayData;


В этом случае значения "расфасовываются" по ячейкам таблицы мгновенно, затем я забираю полученную табличку и вставляю ее обратно в Word, соблюдая условие - курсор должен находиться сразу под шапкой нужной таблички.

Код

 XLApp.Range[XLApp.Cells.Item[1,1],XLApp.Cells.Item[MaxR,MaxC]].Select;
 XLApp.Selection.Copy;
...
 WordDocument.Tables.Item(k).Select;
 WordApp.Selection.MoveDown(OLEVariant(wdLine),OLEVariant(1),EmptyParam);
 WordApp.Selection.PasteSpecial;


Вообще говоря для этой цели лучше использовать метод PastAppendTable, но он появился только в модуле для WordXP, мне же приходится довольствоваться методом PasteSpecial, который есть в 97 и 2000 версиях. Благодаря этим методам вставляемая табличка автоматически берет себе форматирование последней строки таблицы, под которую осуществляется вставка, включая ширину столбцов. Единственное условие - количество столбцов должно совпадать.

Хорошо, если кому-то это поможет.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.