AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Word-Dokument seitenweise splitten
Thema durchsuchen
Ansicht
Themen-Optionen

Word-Dokument seitenweise splitten

Ein Thema von DeddyH · begonnen am 18. Okt 2007 · letzter Beitrag vom 18. Okt 2007
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#1

Word-Dokument seitenweise splitten

  Alt 18. Okt 2007, 18:24
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Word-Dokument seitenweise splitten

  Alt 18. Okt 2007, 18:37
Zitat von DeddyH:
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?
Nein, die Daten müssen ja von Word gerendert werden, damit man die Seitenumbrüche findet.
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
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#3

Re: Word-Dokument seitenweise splitten

  Alt 18. Okt 2007, 18:53
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
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#4

Re: Word-Dokument seitenweise splitten

  Alt 18. Okt 2007, 19:37
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:
    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;
Vielleicht hilfts dir was, man müsste mal die ganzem Parameter erforschen.
Ich könnte mir vorstellen, dass es möglich ist, was du vorhast.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#5

Re: Word-Dokument seitenweise splitten

  Alt 18. Okt 2007, 20:05
Auch Dir Danke. Ich habe mittlerweile einen VBA-Code gefunden, der meinem Vorhaben halbwegs nahe kommt. Leider lässt sich das so nicht 1:1 in Delphi umsetzen, aber ich bleibe dran
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:26 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