Word, înlocuirea textului găsit prin ștergerea unei linii.
Alo Cum altfel (cu excepția următoarelor metode) pot înlocui în mod eficient o variabilă specială în Word-e scoaterea liniei de documente în cazul în care variabila este?
Codul de funcționare de mai jos funcționează foarte lent și, prin urmare, este ineficient în nici măcar documente foarte mari. (Folosesc fila Delphi-> Servere)
a, b, Vstart, Vend, OldStr: OleVariant;
Lungimea cuvântului. j, k, n # 032; # 032; # 032 ;: întreg;
KeyStop. boolean;
.
.
j # 032 ;: = 0;
KeyStop: = False;
n # 032 ;: =? // Setează valoarea dorită
# 032; Repetați
# 032; # 032; # 032; a: = j;
# 032; # 032; # 032; b: = j + n;
# 032; # 032; # 032; dacă WordDocument1.Range (a, b) .Text = oldStr începe apoi
# 032; # 032; # 032; # 032; # 032; Vstart # 032 ;: = j;
# 032; # 032; # 032; # 032; Vend # 032; # 032 ;: = j + n;
# 032; # 032; # 032; # 032; # 032; KeyStop: = Adevărat;
# 032; # 032; # 032; se încheie;
# 032; # 032; # 032; Inc (j);
# 032; # 032; până când (j = WordLength-n) sau (KeyStop = True);
WordDocument1.Range (Vstart, Vend) .Selectați; # 032;
WordApplication1.Selection.Delete (EmptyParam, EmptyParam);
, unde WordLength este lungimea textului documentului.
Să rescriem întrebarea.
Cum în documentul Word97 puteți găsi șirul specificat și îl puteți selecta într-un mod diferit de cel de mai sus?
Ar trebui să utilizați o variantă deoarece metoda Find.Execute este un pic buggy. Ceva de genul asta, de exemplu:
Rnge: = Doc.Content;
Rnge.Find.Execute ( "vechi", Wrap: = wdFindContinue, ReplaceWith: = "nou", înlocuiește: = wdReplaceAll);
Sfat de Deborah Pate
WordApp: = CreateOLEObject ("Word.Application");
WordApp.Documents.Open (dvs.DocFile);
WordApp.Selection.Find.ClearFormatting;
WordApp.Selection.Find.Text: = yourOldStr;
WordApp.Selection.Find.Replacement.Text: = YourNewStr;
WordApp.Selection.Find.Forward: = Adevărat;
WordApp.Selection.Find.Wrap: = 1;
WordApp.Selection.Find.Format: = False;
WordApp.Selection.Find.MatchCase: = False;
WordApp.Selection.Find.MatchWholeWord: = False;
WordApp.Selection.Find.MatchWildcards: = Adevărat;
WordApp.Selection.Find.MatchSoundsLike: = False;
WordApp.Selection.Find.MatchAllWordForms: = False;
WordApp.Selection.Find.Execute (Înlocuiți: = 2);
WordApp.ActiveDocument.SaveAs (dvs.NewDocFile);
WordApp.Quit;
WordApp: = Neasignat;
MBo, mulțumesc, dar este o modalitate standard de a înlocui o linie cu alta.
Și întrebarea este să găsiți șirul dat și să îl selectați și totul.
WordDocument1.Range (a, b).
Nu am adăugat o expresie data anterioară.
Ceva ca:
WordDocument1.Range (a, b) .Selectați
Subj a fost, BTW: înlocuirea textului găsit prin ștergerea unui șir
în măsura în care înțeleg, în cel de-al doilea exemplu, puteți face clic pe linie
WordApp.Selection.Find.Text: = yourOldStr;
Nu, nu este. Prin aceasta, ați setat unul dintre parametrii de căutare, dar nu vă opriți la yourOldStr
Am decis. Amintiți-vă, un lucru util - atunci intrați la îndemână. Datele din Word sunt scrise dintr-o anumită matrice Store, formată mai devreme.
var
oldStr, newStr, înlocuiți: OleVariant;
.
.
Înlocuiți: = 1;
repeta
Inc (pas);
.
WordApplication1.Selection.Find.ClearFormatting; WordApplication1.Selection.Find.Replacement.ClearFormatting;
WordApplication1.Selection.Find.Text: = oldStr;
în cazul în care WordApplication1.Selection.Find.Execute (oldStr, EmptyParam. înlocuiți), apoi începe
dacă Massif ^ [Step] = "" apoi // Șterge linia dacă nu există date
WordApplication1.Selection.Delete (EmptyParam, EmptyParam)
altfel
WordApplication1.Selection.TypeText (newStr); // Vă permite să înlocuiți un șir de mai mult de 256 de caractere
se încheie;
.
până la Pasul = FullStep
Memorie: 0,74 MB
Timing: 0.027 sec