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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование таблицы в Word, Быстрое 
:(
    Опции темы
Лисеночек
Дата 3.8.2005, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день.
Такая проблема: есть огромная таблица в DBFфайле. Я делаю по ней выборку в ADOQuery. Потом делаю отчет в Word2000 методом позднего связывания.
Но строки кидаю в Word таким макаром:
Код

         wdoc.Tables.Add(w.Selection.Range, ADODataSet2.RecordCount + 1, 10, TableBeh, EmptyParam);
for i := 0 to ADODataSet2.RecordCount-1 do
           begin
             wdoc.Tables.Item(1).Cell(i+2,1).Range.Text:=inttostr(i+1);
             wdoc.Tables.Item(1).Cell(i+2,2).Range.Text:=ADODataSet2.FieldByName('NAIM').AsString;
             wdoc.Tables.Item(1).Cell(i+2,3).Range.Text:=ADODataSet2.FieldByName('OBOZ').AsString;
             wdoc.Tables.Item(1).Cell(i+2,4).Range.Text:=ADODataSet2.FieldByName('EI').AsString;
             wdoc.Tables.Item(1).Cell(i+2,5).Range.Text:=ADODataSet2.FieldByName('IC').AsString;
             wdoc.Tables.Item(1).Cell(i+2,6).Range.Text:=ADODataSet2.FieldByName('CENAD').AsString;
             wdoc.Tables.Item(1).Cell(i+2,7).Range.Text:=ADODataSet2.FieldByName('NAIM_1').AsString;
             wdoc.Tables.Item(1).Cell(i+2,8).Range.Text:=ADODataSet2.FieldByName('KF').AsString;
             wdoc.Tables.Item(1).Cell(i+2,9).Range.Text:=ADODataSet2.FieldByName('OC').AsString;
             wdoc.Tables.Item(1).Cell(i+2,10).Range.Text:=ADODataSet2.FieldByName('DATE').AsString;
             ADODataSet2.Next;
           end; // for i



И вот уже полчаса сижу и смотрю, как поооооостепенно добавляются сроки. Как бы можно было ускорить этот процесс. Может можно кидать таблицу целиком?
Заранее благодарю.

PM MAIL   Вверх
Петрович
Дата 3.8.2005, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Попробуй так:
- сформируй в программе длинную строку где записи разделены символоами перевода строки, а поля разделены символом табуляции
- скопируй эту строку в Clipboard
- а теперь, вставь из клипбоарда в Word

Я так с Excel'ом поступаю. Где то здесь я недавно об этом уже писал.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Оленька
Дата 5.8.2005, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сразу должна заметить, что Оля и Лисенок - один человек, только на разных компах.
Тем способом, что подсказал Петрович тоже было очень долго - строка наполнялась только минуты 2.
Я нашла решение этой проблемы - использую компоненты EkRTF, с ними, кроме того, что быстро, еще и удобно, кода совсем мало. Скачать можно тут EkRTF

Это сообщение отредактировал(а) Girder - 5.8.2005, 11:55
PM MAIL   Вверх
Петрович
Дата 5.8.2005, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

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



Цитата
Тем способом, что подсказал Петрович тоже было очень долго - строка наполнялась только минуты 2.

Странно. Может именно формирование не эффектикно сделано?
Кстати, если во время дизайна создать поля для ADODataSet2 и при формировании пользоваться ими, то будет существнно быстрее. Вроде такого:
Код

s := '';
ADODataSet2.First;
while not ADODataSet2.EOF  do begin
  s := s
     +inttostr(i+1)
  +^I+ADODataSet2NAIM.AsString
  +^I+ADODataSet2OBOZ.AsString
  +^I+ADODataSet2EI.AsString
  +^I+ADODataSet2IC.AsString
  +^I+ADODataSet2CENAD.AsString
  +^I+ADODataSet2NAIM_1.AsString
  +^I+ADODataSet2KF.AsString
  +^I+ADODataSet2OC.AsString
  +^I+ADODataSet2DATE.AsString
  +^M^J;
  ADODataSet2.Next;
end; // for i



--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
Akella
Дата 9.8.2005, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



Есть способ создания таблиц в Word`e, который заключается в следующем: "отправляем" в Word текст из нескольких строк, содержащих подстроки с разделитклями (символ, который не встречается в тексте), преобразуем текст в таблицу методом convertToTable объекта Range.

Код

Var
 Rng: Variant;
...
Rng := App.Selection.Ranger;
rng.collapse(wdCollapseEnd);
rng.InsertAfter('1, 2, 3');
rng.InsertParagraphAfter;
rng.InsertAfter('4, 5, 6');
rng.InsertParagraphAfter;
rng.InsertAfter('7, 8, 9');
rng.InsertParagraphAfter;
rng.ConvertToTable;


внешний вид таблиц можно менять с момощью свойства Format, а также с помощью свойств коллекции Columns и коллекции Rows (объекта Table).
Добавлено @ 15:45
перемещенире курсора по тексту
Код

const
  wdCollapseStart = $00000001;//новый объект нах. в начале фрагмента
  wdCollapseEnd = $00000000;//новый объект нах. в конце фрагмента


Это сообщение отредактировал(а) dsergey - 9.8.2005, 15:46
PM MAIL   Вверх
Albinos_x
Дата 12.8.2005, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


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

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



Цитата
И вот уже полчаса сижу и смотрю, как поооооостепенно добавляются сроки. Как бы можно было ускорить этот процесс.


Если грузить в невидимый документ, а после окончания делать видимым, то процесс быстрее происходит. Плюс к этому пользуйся советами
dsergey и Петровича

Незнаю сколько у тебя листов - у меня 8 листов вместе с различным форматированием текста и др. действиями за несколько секунд заполняются (правда таблица там одна и она небольшая - остальное в виде списка сделано)


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0942 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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