![]() |
Word-Dokument seitenweise splitten
Hallo DPler,
ich möchte ein existierendes Word-Dokument seitenweise in Einzeldokumenten ablegen. Leider habe ich mich noch nie mit OLE-Automation beschäftigt und weiß daher nicht, wie ich da nun genau vorgehen muss. Gibt es evtl. eine Möglichkeit, ganz auf OLE zu verzichten, das Dokument z.B. in einen Stream zu laden, nach einer Art "Seitenkennung" zu suchen und dann zu speichern, oder ist OLE die praktikablere Möglichkeit? Hier mal mein bisheriger Code:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Word: Variant; Seiten, i: integer; begin try Word := GetActiveOleObject('Word.Application'); except Word := CreateOleObject('Word.Application'); end; Word.Visible := True; Word.Documents.Open('C:\Dok1.doc', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); Seiten := Word.ActiveDocument.ComputeStatistics(2); for i := 0 to Seiten - 1 do begin //aktuelle Seite markieren und als Dokument abspeichern end; Word.ActiveDocument.Close( -1, EmptyParam, EmptyParam); end; |
Re: Word-Dokument seitenweise splitten
Zitat:
Das Wordformat ist für aussenstehende Programme nahezu unlesbar. Allerdings kommst du wahrscheinlich mit VB Script innerhalb von Word oder einem Makro am schnellsten zum Ziel. Hier mal ein Makro, dass einen Seitenumbruch findet:
Code:
Sub Makro1()
' ' Makro1 Makro ' Makro aufgezeichnet am 18.10.2007 von shmia ' Selection.Find.ClearFormatting With Selection.Find .Text = "^m" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With Selection.Find.Execute ' suchen Selection.Find.Execute ' nochmal suchen Selection.Find.Execute End Sub |
Re: Word-Dokument seitenweise splitten
Hallo shmia, Danke für Deine Antwort. Geht das auch von "außen", d.h. aus Delphi heraus? Der Hintergrund ist der:
Einer unserer Kunden benutzt eine Finanzsoftware, die bei einem z.B. Mahnlauf sämtliche Anschreiben in einem großen Dokument ablegt. Somit ist es für die Sachbearbeiterin sehr mühsam, das Dokument so zu bearbeiten (händisch zu splitten), dass sie die einzelnen Schreiben den entsprechenden Debitoren zuordnen kann. Da erfahrungsgemäß die Anschreiben eine Seite nicht überschreiten, war meine Idee eben, diese Splittung auf Einzeldokumente zu automatisieren. Ob der Kunde allerdings damit einverstanden ist, Makros von mir zu akzeptieren, wage ich zu bezweifeln. BTW: Das gehört zum Kundendienst, falls ich das hinbekomme, nicht, dass jemand meint, ich will mich auf Kosten der Community bereichern ;) |
Re: Word-Dokument seitenweise splitten
Hier ein Codefragment (damals noch Delphi 6).
Es wurde ein Worddocument mit Word geöffnet und als RTF gespeichert. Auf dem Form liegen:
Delphi-Quellcode:
Vielleicht hilfts dir was, man müsste mal die ganzem Parameter erforschen.
Word_App: TWordApplication;
Word_Doc: TWordDocument; //die eigentliche Routine try Word_App.Connect; except ShowMessage('MS-Word scheint nicht installiert zu sein!'); Exit; end; // Word_App.Visible:=True; try Word_App.Documents.OpenOld(wDocFileOpenName,EmptyParam,EmptyParam,wdAddToRecent, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); Pause:=True; Word_App.ActiveDocument.SaveAs(wRTFTempName,wdFormatRTF,EmptyParam,EmptyParam, wdAddToRecent,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam); finally Word_App.ActiveDocument.Close(wdSaveChanges,EmptyParam,EmptyParam); Word_App.Quit(wdSaveChanges); Word_App.Disconnect; end; Ich könnte mir vorstellen, dass es möglich ist, was du vorhast. |
Re: Word-Dokument seitenweise splitten
Auch Dir Danke. Ich habe mittlerweile einen
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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