![]() |
COM-Automation Word, Fusszeile löschen
Hallo,
ich versuche gerade krampfhaft, in einem Word-Dokument die Fusszeile zu löschen, oder zumindestes den Inhalt. Da ich den Inhalt nicht kenne, kann ich keines der Search&Replace-Bsp.-e benutzen. Meine bisherigen Bemühungen seht ihr unten. Klappt leider nicht ;( Hat jemand einen Tip? Danke Heiko PS: Späte Bindung benutze ich, um versionsunabhängiger zu sein.
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var WordApp: OLEVariant; D : OLEVariant; S : OLEVariant; F : OLEVariant; Range : OLEVariant; begin DeleteFile('c:\temp10\3.doc'); try WordApp := CreateOLEObject('Word.Application'); except on E: Exception do begin Exit; end; end; //WordApp.Visible:= False; WordApp.Documents.Open('c:\temp10\2.doc'); D := WordApp.ActiveDocument; WordApp.ActiveWindow.ActivePane.View.SeekView := wdSeekPrimaryFooter; WordApp.Selection.Select; WordApp.Selection.Text := ''; Clear ?? Range ?? WordApp.Selection.Font.Size := 20; WordApp.Selection.TypeText('Seite '); (* S := D.Sections[1]; F := S.Footers(1); Range := F.Range; Range.Select; Range.Clear; *) WordApp.ActiveDocument.SaveAs('c:\temp10\3.doc'); WordApp.Quit; WordApp := Unassigned; end; |
AW: COM-Automation Word, Fusszeile löschen
Es ist lange her, daß ich Word-Automation betrieb. Was ich mir behalten habe ist
1) Du musst immer den zu löschenden Text markieren (Range oder so) 2) Späte Bindung verlangsamt mindestens um den Faktor 10 Sherlock |
AW: COM-Automation Word, Fusszeile löschen
Hallo,
meine bisherigen Bemühungen sind zumindestens vom Erfolg gekrönt!!! Einziger Nachteil ist bei WordApp.Selection.SetRange(0,10000); die 10000. Mehr habe ich auf jeden Fall nicht drin. Eine Lösung ohne die 10000 wäre schön. Ich finde aber kein SelectAll. Danke Heiko
Delphi-Quellcode:
procedure TForm67.Button3Click(Sender: TObject);
var WordApp: OLEVariant; begin DeleteFile('c:\temp10\3.doc'); try WordApp := CreateOLEObject('Word.Application'); except on E: Exception do begin Exit; end; end; WordApp.Visible:= False; WordApp.Documents.Open('c:\temp10\2.doc'); WordApp.ActiveWindow.ActivePane.View.SeekView := wdSeekPrimaryFooter; WordApp.Selection.SetRange(0,10000); WordApp.Selection.Text := ''; WordApp.ActiveDocument.SaveAs('c:\temp10\3.doc'); WordApp.Quit; WordApp := Unassigned; end; |
AW: COM-Automation Word, Fusszeile löschen
So Suche ich und lösche bis zum Ende im Dokument, sollte aber auch in der Fußzeile gehen.
Code:
Gruß
Selection.EndKey unit:=wdStory, Extend:=wdMove
Selection.Find.ClearFormatting With Selection.Find .Text = "---- delete hereof:" .Replacement.Text = "" .Forward = False .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .CorrectHangulEndings = True .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Selection.EndKey unit:=wdStory, Extend:=wdExtend Selection.Delete K-H |
AW: COM-Automation Word, Fusszeile löschen
Hallo Sherlock,
mit dem Speedverlust muss ich leben, weil das TWordApplication Methoden bereitstellt, die je nach Word-Version andere Parameter haben. Heiko |
AW: COM-Automation Word, Fusszeile löschen
Versuch es mal so:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var WordApp: OLEVariant; D : OLEVariant; S : OLEVariant; F : OLEVariant; Range : OLEVariant; begin DeleteFile('c:\temp10\3.doc'); try WordApp := CreateOLEObject('Word.Application'); except on E: Exception do begin Exit; end; end; //WordApp.Visible:= False; D :=WordApp.Documents.Open('c:\temp10\2.doc'); D.sections[1].footers[1].range.Delete; WordApp.ActiveDocument.SaveAs('c:\temp10\3.doc'); WordApp.Quit; WordApp := Unassigned; end; |
AW: COM-Automation Word, Fusszeile löschen
@EarlyBird
So eine windige Konstruktion mit dem
Delphi-Quellcode:
habe ich auch noch nicht gesehen :shock:
try .. except
Nimm wenigstens statt
Delphi-Quellcode:
(bricht die aktuelle Methode/Prozedur ab)
Exit
Delphi-Quellcode:
(stille Exception) oder lass es ganz weg und fang das mit
Abort
Delphi-Quellcode:
ab, dann kannst du das wenigstens noch protokollieren.
Application.OnException
|
AW: COM-Automation Word, Fusszeile löschen
Zitat:
Ich habe nur die Stelle zum löschen des Footers angepasst Beim restlichen Code will ich dem TE ja nicht ins Handwerk pfuschen:lol: |
AW: COM-Automation Word, Fusszeile löschen
Zitat:
|
AW: COM-Automation Word, Fusszeile löschen
Hallo,
windig ??? :) Ist doch nur zum Testen. Ich schau mir den Code nachher auf Arbeit an. Danke. Heiko |
AW: COM-Automation Word, Fusszeile löschen
Wenn das nur zum Testen ist, warum willst du dann Exceptions unterdrücken?
Die würden doch gerade beim Testen hilfreich sein, wenn der Aufruf nicht funktioniert. Ach, der funktioniert an deinem Rechner immer, und da kommt gar keine Exception? Wofür dann das Konstrukt drumherum? ;) |
AW: COM-Automation Word, Fusszeile löschen
Hallo,
Das ist doch nicht der vollständige Code. Vor dem Exit wird noch eine sinnvolle Fehlermeldung generiert, die wird geloggt und dann dem Nutzer angezeigt. Aber du hast schon Recht: Für. Ein Minimalbeispiel hätte ich das weglassen können. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz