AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

COM-Automation Word, Fusszeile löschen

Ein Thema von hoika · begonnen am 19. Mai 2014 · letzter Beitrag vom 22. Mai 2014
Antwort Antwort
Seite 1 von 2  1 2      
hoika

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

COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 09:04
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;
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#2

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 09:19
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
hoika

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

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 09:23
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;
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 11:08
So Suche ich und lösche bis zum Ende im Dokument, sollte aber auch in der Fußzeile gehen.

Code:
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
Gruß

K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
hoika

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

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 19:33
Hallo Sherlock,

mit dem Speedverlust muss ich leben,
weil das TWordApplication Methoden bereitstellt,
die je nach Word-Version andere Parameter haben.


Heiko
Heiko
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#6

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 22:10
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 22:22
@EarlyBird

So eine windige Konstruktion mit dem try .. except habe ich auch noch nicht gesehen

Nimm wenigstens statt Exit (bricht die aktuelle Methode/Prozedur ab) Abort (stille Exception) oder lass es ganz weg und fang das mit Application.OnException ab, dann kannst du das wenigstens noch protokollieren.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
EarlyBird

Registriert seit: 29. Mär 2007
235 Beiträge
 
#8

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 22:30
@EarlyBird

So eine windige Konstruktion mit dem try .. except habe ich auch noch nicht gesehen
Der Code kam vom TE.
Ich habe nur die Stelle zum löschen des Footers angepasst
Beim restlichen Code will ich dem TE ja nicht ins Handwerk pfuschen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: COM-Automation Word, Fusszeile löschen

  Alt 19. Mai 2014, 22:58
@EarlyBird

So eine windige Konstruktion mit dem try .. except habe ich auch noch nicht gesehen
Der Code kam vom TE.
Ich habe nur die Stelle zum löschen des Footers angepasst
Beim restlichen Code will ich dem TE ja nicht ins Handwerk pfuschen
stimmt ... (gibts hier keinen Tomaten-Auf-Den-Augen Smiley?)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hoika

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

AW: COM-Automation Word, Fusszeile löschen

  Alt 20. Mai 2014, 06:08
Hallo,

windig ???

Ist doch nur zum Testen.

Ich schau mir den Code nachher auf Arbeit an.
Danke.

Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz