Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];

Вниз

Глюки с передачей данных в Word.   Найти похожие ветки 

 
Grol ©   (2005-09-11 03:08) [0]

Еще раз здравствуйте. Такой вопрос из 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;


 
Grol ©   (2005-09-11 16:05) [1]

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


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;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.005 c
1-1126035114
Yura32
2005-09-06 23:31
2005.10.02
XP Button


1-1126249924
Makhanev A.S.
2005-09-09 11:12
2005.10.02
Управление версионированием проекта...


1-1126678202
Фёдор Сумкин
2005-09-14 10:10
2005.10.02
Ошибка Rave Reports


1-1126024282
ДимДимыч
2005-09-06 20:31
2005.10.02
Выполнение скриптов


1-1125897918
Fanny
2005-09-05 09:25
2005.10.02
Как "победить" лимит String в Записи ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский