IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Подвисает при добавлении кода, работа с вордом
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


procedure TForm4.Button2Click(Sender: TObject);
var FilePath: string;
begin
Savedialog1.execute;
FilePath:=ExtractFilePath(GetModuleName(HInstance)) + 'Report.doc';
Word.Documents.Open(FilePath);
FindAndReplace('$s1',floattostr(Q));
FindAndReplace('$s2',floattostr(ggg));
FindAndReplace('$s3',res);
end;


Вот процедура замещения части текста в готовом шаблоне *.doc
При добавлении кода виснет
Нужно чтобы Пользователь в SaveDialog написал имя файла и сохранился под этим именем уже измененный файл
Закрыть грамотно тоже надо документ и ворд, у меня получается пока только подвешивать smile.gif

P.S Объект Word и процедура FindAndReplace были использованы отсюда http://www.webdelphi.ru/2010/02/microsoft-word-v-delphi/

Сообщение отредактировано: cooler -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Что именно виснет у тебя?

// Создаешь объект Word где-то в программе
W:=CreateOleObject('Word.Application');


function FindAndReplace(WordApp: Variant; Poisk, Zamena : string): Boolean;
begin
WordApp.Selection.Start := 0;
WordApp.Selection.End := 0;

WordApp.Selection.Find.ClearFormatting;

WordApp.Selection.Find.Forward := true;
WordApp.Selection.Find.Wrap := 1; // wdFindContinue
WordApp.Selection.Find.MatchCase := true;

WordApp.Selection.Find.Text := poisk;
WordApp.Selection.Find.Replacement.Text := zamena;

WordApp.Selection.Find.Execute(Replace := 2); // wdReplaceAll

result := true;
end;

procedure TForm1.ButtonFindReplaceClick(Sender: TObject);
var Doc: variant;
begin
try
Doc := W.Documents.Open(FileName:='F:\a.doc');
if SaveDialog2.Execute() then
begin
FindAndReplace(W, 'XXX', ChangeTo.Text);
Doc.saveas(SaveDialog1.FileName);
end;
finally
Doc := Unassigned; // Документ закрываешь сразу
end;
end;

// Закрываешь, когда становится не нужен
W.Quit;
W := Unassigned;

Ничего не виснет, как работало так и работает...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.12.2024 1:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name