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');