Форум: "Основная";
Текущий архив: 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