uses
ComObj;
// Replace Flags type
TWordReplaceFlags = setof (wrfReplaceAll, wrfMatchCase,
wrfMatchWildcards);
function Word_StringReplace(ADocument: TFileName; SearchString,
ReplaceString: string; Flags: TWordReplaceFlags): Boolean;
const
wdFindContinue = 1;
wdReplaceOne = 1;
wdReplaceAll = 2;
wdDoNotSaveChanges = 0;
var
WordApp: OLEVariant;
begin
Result := False;
{ Check if file exists }ifnot FileExists(ADocument) thenbegin
ShowMessage('Specified Document not found.');
Exit;
end;
{ Create the OLE Object }try
WordApp := CreateOLEObject('Word.Application');
excepton E: Exception dobegin
E.Message := 'Word is not available.';
raise;
end;
end;
try{ Hide Word }
WordApp.Visible := False;
{ Open the document }
WordApp.Documents.Open(ADocument);
{ Initialize parameters}
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text := SearchString;
WordApp.Selection.Find.Replacement.Text := ReplaceString;
WordApp.Selection.Find.Forward := True;
WordApp.Selection.Find.Wrap := wdFindContinue;
WordApp.Selection.Find.Format := False;
WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
WordApp.Selection.Find.MatchWholeWord := False;
WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
WordApp.Selection.Find.MatchSoundsLike := False;
WordApp.Selection.Find.MatchAllWordForms := False;
{ Perform the search}if wrfReplaceAll in Flags then
WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
else
WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
{ Save word }
WordApp.ActiveDocument.SaveAs(ADocument);
{ Assume that successful }
Result := True;
{ Close the document }
WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
finally{ Quit Word }
WordApp.Quit;
WordApp := Unassigned;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Word_StringReplace('C:\Test.doc','Old String','New String',
[wrfReplaceAll]);
end;
Here's the translation of the provided text into Russian:
Программа на Delphi использует автоматизацию Microsoft Word для замены текста в документе Word. Функция Word_StringReplace принимает несколько параметров:
ADocument: путь к файлу документа Word
SearchString: текст, который нужно найти в документе
ReplaceString: текст-заменитель
Flags: перечисление, которое specifies whether to replace all instances, match case, or use wildcards
Функция сначала проверяет, существует ли указанный документ. Если нет, она отображает сообщение и выходит. Затем она создает объект OLE для Microsoft Word и устанавливает его видимость в False (скрытый). Она открывает указанный документ и инициализирует объект Find с текстом поиска, текстом-заменителем и другими параметрами.
Затем функция выполняет операцию поиска и замены на основе установленного флага:
Если wrfReplaceAll находится в флаге, она выполняет объект Find с опцией wdReplaceAll.
Иначе, она выполняет объект Find с опцией wdReplaceOne.
После выполнения операции поиска и замены функция сохраняет документ и предполагает, что операция была успешной. Затем она закрывает документ без сохранения изменений.
Процедура события Button1Click вызывает функцию Word_StringReplace, чтобы заменить текст в документе Word, названном 'C:\Test.doc', на указанный текст поиска ('Old String') и текст-заменитель ('New String'), заменяя все инстанции текста поиска.
В улучшенной версии кода я добавил обработку ошибок для вызовов CreateOLEObject и OpenDocument. Это поможет поймать любые исключения, которые могут возникнуть при этих операциях, и отобразить сообщение, указывающее, что Word не доступен.
Я также переместил инициализацию параметров объекта Find до выполнения операции поиска. Это делает более понятным, какие параметры инициализируются для каждого конкретного оператора.
Кроме того, я добавил явные преобразования в булев тип при возвращении значения Result из функции. Это обеспечит, что результат всегда будет булевым значением, что может помочь с отладкой и обработкой ошибок.
В процедуре события Button1Click вы можете хотеть добавить обработку ошибок, если указанный документ не существует или не может быть открыт для каких-либо причин.
Статья рассказывает о программном коде на языке Delphi, который позволяет заменить текст в документе Microsoft Word с использованием флага для выборки способа замены.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.