Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#1

Winword-OLE Search&Replace

  Alt 20. Jul 2016, 15:49
Hallo,
ich habe hier eine Docx-Datei mit einer Kopfzeile.
In der Zip-Datei (Docx=Zip, wie ihr ja wisst) steht die Kopfzeile in header2.xml.
Das Ersetzen klappt.
Jetzt habe ich eine weitere Docx-Datei, das steht die Kopfzeile in header3.xml.
Und genau hier klappt das Ersetzen nicht!

Es sieht so aus, als ob ich durch alle Kopfzeilen-Sektions muss.

Der Code ist nichts besonderes, kommt zum Teil von hier
http://www.delphipraxis.net/155216-w...nsertfile.html (#5)

Hm, und während des Schreibens hatte ich die Lösung
Wenn ich in Word eine Kopfzeile einfüge, schreibt er "1. Kopfzeile".
Ich kann also nicht nur einen (eine ) geben.

Deshalb noch mal die Frage:
Es sieht so aus, als ob ich durch alle Kopfzeilen-Sektions muss.

Ah ja, nicht über die SL_Search wundern, dass ist noch ein Anpassung zu
"ersetze Zeichen mit mehr als 255 Zeichen".

Delphi-Quellcode:
      
procedure DBInText_OLE_ReplaceString(const WordApp: OLEVariant;
  const SearchString, ReplaceString: String; const ZusatzLogInfo: String = '');

      WordApp.Selection.Find.ClearFormatting;
      WordApp.Selection.Find.Replacement.ClearFormatting;
      WordApp.Selection.Find.Text:= SL_Search[iString];
      WordApp.Selection.Find.Replacement.Text := SL_Replace[iString];
      WordApp.Selection.Find.Forward := True;
      WordApp.Selection.Find.Wrap := wdFindContinue;
      WordApp.Selection.Find.Format := False;
      WordApp.Selection.Find.MatchCase := False;
      WordApp.Selection.Find.MatchWholeWord := False;
      WordApp.Selection.Find.MatchWildcards := False;
      WordApp.Selection.Find.MatchSoundsLike := False;
      WordApp.Selection.Find.MatchAllWordForms := False;

      //WordApp.Selection.Find.Execute(Replace:= wdReplaceAll);
      iDummy := 0;
      if not WordApp.Selection.Find.Execute(Replace:= wdReplaceAll) then
      begin
        iDummy := 1;
      end;

// Aufruf
// 1. Kopfzeile
// WordApp.ActiveWindow.ActivePane.View.SeekView:= wdSeekFirstPageHeader;
// DBInText_OLE_ReplaceString(WordApp, SearchString, ReplaceString, '1. Kopfzeile');

               WordApp.ActiveWindow.ActivePane.View.SeekView:= wdSeekCurrentPageHeader;
               DBInText_OLE_ReplaceString(WordApp, SearchString, ReplaceString, 'Kopfzeile');

               WordApp.ActiveWindow.ActivePane.View.SeekView:= wdSeekMainDocument;
               DBInText_OLE_ReplaceString(WordApp, SearchString, ReplaceString, 'Hauptdokument');

               WordApp.ActiveWindow.ActivePane.View.SeekView:= wdSeekCurrentPageFooter;
               DBInText_OLE_ReplaceString(WordApp, SearchString, ReplaceString, 'Fusszeile');
Heiko
  Mit Zitat antworten Zitat