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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюки с передачей данных в Word. 
:(
    Опции темы
Grol
Дата 11.9.2005, 01:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Еще раз здравствуйте. Такой вопрос из Stringgrid переношу информацию в Word, а частности в таблицу, которую я создал до того как переносить данные из Stringgrid в Word. Возниает очень странный глюк: данные переносятся очень медленно как-будто у меня не Пень 4, а спектрум. :-(((( В ячейки таблицы данные заполняются с частотой примерно 0.5 сек., может быть немного побыстрее (но все равно это же медленно), а если же при заполнении таблицы нажжать на прокрутку Word'a и держать, то процесс почему-то ускорится...??????? Мастера подскажте в чем может здесь быть дело? Спасибо заранее.

Вот здесь код по созданию и заполнению таблицы:

Код

implementation

uses ComObj;
var W:variant;

Function CreateWord:boolean;
begin
CreateWord:=true;
try
W:=CreateOleObject('Word.Application');
except
CreateWord:=false;
end;
End;

Function VisibleWord(visible:boolean):boolean;
begin
VisibleWord:=true;
try
W.visible:= visible;
except
VisibleWord:=false;
end;
End;

Function AddDoc:boolean;
 Var Doc_:variant;
begin
AddDoc:=true;
try
Doc_:=W.Documents;
Doc_.Add;
except
AddDoc:=false;
end;
End;

Function SetTextToDoc(text_:string ;InsertAfter_:boolean):boolean;
 var Rng_:variant;
begin
SetTextToDoc:=true;
try
Rng_:=W.ActiveDocument.Range;
if InsertAfter_ then Rng_.InsertAfter(text_) else Rng_.InsertBefore(text_);
except
SetTextToDoc:=false;
end;
End;

Function SaveDocAs(file_:string):boolean;
begin
SaveDocAs:=true;
try
W.ActiveDocument.SaveAs(file_);
except
SaveDocAs:=false;
end;
End;

Function CreateTable(NumRows, NumColumns:integer;var index:integer):boolean;
 var sel_:variant;
begin
CreateTable:=true;
try
sel_:=W.selection;
W.ActiveDocument.Tables.Add(Range:=sel_.Range, NumRows:=NumRows, NumColumns:=NumColumns);
index:=W.ActiveDocument.Tables.Count;
except
CreateTable:=false;
end;
End;

procedure TReportForm.TableBtnClick(Sender: TObject);
var
tablica_:integer;
i,j,TempTT,TempTTT:integer;
TempTable:string;
begin
   TempTT:=SG2.RowCount + 2;
   If CreateTable(TempTT,3,tablica_) then
   begin
    SetTextToTable(tablica_,1,1,'Итог');
    SetTextToTable(tablica_,2,1,'Номер П/П');
    SetTextToTable(tablica_,2,2,'T');
    SetTextToTable(tablica_,2,3,'U');
    TempTT:=SG2.RowCount-1;
    for i:=0 to TempTT do
      begin
        Application.ProcessMessages;
        TempTable:=inttostr(i+1);
        SetTextToTable(tablica_,i+3,1,TempTable);
      end;
    for i:=0 to TempTT do
      begin
        Application.ProcessMessages;
        TempTable:=SG2.Cells[0,i];
        SetTextToTable(tablica_,i+3,2,TempTable);
      end;
    for i:=0 to TempTT do
      begin
        Application.ProcessMessages;
        TempTable:=SG2.Cells[1,i];
        SetTextToTable(tablica_,i+3,3,TempTable);
      end;
    SetMergeCellsTable(tablica_,1,1,1,3);
   end;
end;

Function CloseDoc:boolean;
begin
CloseDoc:=true;
try
W.ActiveDocument.Close;
except
CloseDoc:=false;
end;
End;

Function CloseWord:boolean;
begin
CloseWord:=true;
try
W.Quit;
except
CloseWord:=false;
end;
End;

procedure TReportForm.CreateWordRepClick(Sender: TObject);
var
savepath:string;
i,j:integer;
ExWord:string;
rng_:string;
tablica_:integer;
begin
CreateWordRep.Enabled:=False;
savepath:=(ExtractFilePath(paramstr(0)) + 'REPORTS\WordDocument.doc');
 if CreateWord
  then begin
  StatBox.Clear;
  Statbox.Items.Add('Запуск движка Word');
  if ShowWordCh.Checked=True then
    begin
        VisibleWord(true);
        StatBox.Items.Add('Отображение главного окна Word');
    end;
  If AddDoc then begin
    Statbox.Items.Add('Создание документа');
  TableBtnClick(Sender);
    StatBox.Items.Add('Заполнение отчета');
    SaveDocAs(savepath);
    StatBox.Items.Add('Автосохранение отчета в ' + SavePath);
if SaveWordCh.Checked=True then
 if SaveDlg1.Execute then
  begin
   SaveDocAs(SaveDlg1.FileName);
   StatBox.Items.Add('Отчет сохранен ' + SaveDlg1.FileName);
  end; 
   StatBox.Items.Add('Текст сохранен');
   if CloseWordCh.Checked=True then CloseDoc;
   end;
   if CloseWordCh.Checked=True then StatBox.Items.Add('Движок остановлен');
   if CloseWordCh.Checked=True then   CloseWord;
  end;
CreateWordRep.Enabled:=True;
end;


Это сообщение отредактировал(а) Alex - 11.9.2005, 15:11
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
Grol
Дата 11.9.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Извините забыл вот эту функцию:

Код

Function SetTextToTable(Table:integer;Row,Column:integer;text:string):boolean;
begin
SetTextToTable:=true;
try
W.ActiveDocument.Tables.Item(Table).Columns.Item(Column).Cells.Item(Row).Range.Text:=text;
except
SetTextToTable:=false;
end;
End;


Это сообщение отредактировал(а) Alex - 11.9.2005, 15:12
--------------------
Живи так, как будто тебе предстоит умереть завтра...Учись так, как будто тебе предстоит жить вечно.........
PM MAIL ICQ   Вверх
<Spawn>
Дата 12.9.2005, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Подобные темы не раз обсуждались - используйте поиск, например, по слову VarArrayCreate


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
ErManDir
Дата 27.9.2005, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Или используйте раннее связывание с вордом.
PM MAIL ICQ YIM   Вверх
YurikGL
Дата 19.10.2005, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Из стринггрида пишешь всю информацию в большуууую строку (string) разделяя столбцы и строки "переносом строки" и "табуляций" соответсвенно. Потом пихай всю эту длинную строку во ворд. Выделяй с помощью select и делай convertToTable
--------------------
 
PM MAIL WWW 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.0457 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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