Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Глюки с передачей данных в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
1-1126250459
Prov
2005-09-09 11:20
2005.10.02
TImage и массив


10-1105327327
Shadowy
2005-01-10 06:22
2005.10.02
Парсинг .doc в Delphi


3-1124429747
_alex_niv_
2005-08-19 09:35
2005.10.02
Работа с базой


9-1117536077
Jake
2005-05-31 14:41
2005.10.02
Помогите с Glscene, ось вращения


2-1124562995
Пантелеев Иван
2005-08-20 22:36
2005.10.02
RadioGroup