Word, заміна знайденого тексту видаленням рядка

Word, заміна знайденого тексту видаленням рядка.

Добрий день. Як ще (крім наведеного нижче способу) можна ефективно замінити певну змінну в Word-e видаленням рядка документа, де ця змінна знаходиться?
Функціонуючий код, наведений нижче, працює дуже повільно і, тому, малоефективний в навіть не дуже великих документах. (Використовую ятати Delphi-> Servers)
a, b, Vstart, Vend, OldStr: OleVariant;
WordLength. j, k, n # 032; # 032; # 032;: integer;
KeyStop. Boolean;
.
.
j # 032;: = 0;
KeyStop: = False;
n # 032;: =? // Здається необхідна величина
# 032; # 032; repeat
# 032; # 032; # 032; a: = j;
# 032; # 032; # 032; b: = j + n;
# 032; # 032; # 032; if WordDocument1.Range (a, b) .Text = oldStr then begin
# 032; # 032; # 032; # 032; # 032; Vstart # 032;: = j;
# 032; # 032; # 032; # 032; # 032; Vend # 032; # 032;: = j + n;
# 032; # 032; # 032; # 032; # 032; KeyStop: = True;
# 032; # 032; # 032; end;
# 032; # 032; # 032; Inc (j);
# 032; # 032; until (j = WordLength-n) or (KeyStop = True);
WordDocument1.Range (Vstart, Vend) .Select; # 032;
WordApplication1.Selection.Delete (EmptyParam, EmptyParam);

, де WordLength - довжина тексту документа.

Переінакшимо питання.
Як в документі Word97 можна знайти задану рядок і виділити її способом, відмінним від вищенаведеного?

You should use a variant because the Find.Execute method is a bit buggy. Something like this, for example:

Rnge: = Doc.Content;
Rnge.Find.Execute ( "old", Wrap: = wdFindContinue, ReplaceWith: = "new", Replace: = wdReplaceAll);

Tip by Deborah Pate



WordApp: = CreateOLEObject ( "Word.Application");
WordApp.Documents.Open (yourDocFile);
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text: = yourOldStr;
WordApp.Selection.Find.Replacement.Text: = yourNewStr;
WordApp.Selection.Find.Forward: = True;
WordApp.Selection.Find.Wrap: = 1;
WordApp.Selection.Find.Format: = False;
WordApp.Selection.Find.MatchCase: = False;
WordApp.Selection.Find.MatchWholeWord: = False;
WordApp.Selection.Find.MatchWildcards: = True;
WordApp.Selection.Find.MatchSoundsLike: = False;
WordApp.Selection.Find.MatchAllWordForms: = False;
WordApp.Selection.Find.Execute (Replace: = 2);

WordApp.ActiveDocument.SaveAs (yourNewDocFile);
WordApp.Quit;
WordApp: = Unassigned;

MBo, спасибі, але це стандартний спосіб заміни одного рядка на іншу.
А питання полягає в тому, щоб знайти задану рядок і виділити її і все.
WordDocument1.Range (a, b).

Чи не дописав вираз в попередній раз.
Щось на зразок:
WordDocument1.Range (a, b) .Select

Subj був, BTW: заміна знайденого тексту видаленням рядка

наскільки я розумію, у другому прикладі можна зупинитися на сходинці
WordApp.Selection.Find.Text: = yourOldStr;

Ні. Цим ти просто ставиш один з параметрів пошуку, але не зупиняєшся на yourOldStr

Вирішив. Запам'ятовуйте, річ корисна - потім стане в нагоді. Дані в Word заносяться з деякого масиву Store, сформованого раніше.
var
oldStr, newStr, replace: OleVariant;
.
.
Replace: = 1;
repeat
Inc (Step);
.
WordApplication1.Selection.Find.ClearFormatting; WordApplication1.Selection.Find.Replacement.ClearFormatting;
WordApplication1.Selection.Find.Text: = oldStr;
if WordApplication1.Selection.Find.Execute (oldStr, EmptyParam. replace) then begin
if Massif ^ [Step] = "" then // Видаляємо рядок, якщо даних немає
WordApplication1.Selection.Delete (EmptyParam, EmptyParam)
else
WordApplication1.Selection.TypeText (newStr); // Дозволяє замінювати рядок довжиною більше 256 символів
end;
.
until Step = FullStep

Пам'ять: 0.74 MB
Час: 0.027 c

Схожі статті