Forum: PC-Programmierung Word (docx) Datei via Programm erzeugen?


von Peter P. (Gast)


Lesenswert?

Hat schon mal jemand erfolgreich versucht,
eine Word (docx) Datei selbst aus einen C Programm
(oder ähnliches) heraus zu erzeugen?

docx scheint eine ZIP-Datei zu sein,
welche mehrere *.xml Dateien enthält.

Ist da Dokumentation vorhanden, welche XML Dateien man erzeugen
muss, und was darin wie stehen muss?

von Dr. Sommer (Gast)


Lesenswert?

Verwende Java und Apache POI, das ist eine gute Library für MS Office 
Dokumente. Solche Dateien direkt manuell zu erzeugen ist sehr 
kompliziert, das kannst du vergessen...

von Nase (Gast)


Lesenswert?

Peter P. schrieb:
> Ist da Dokumentation vorhanden, welche XML Dateien man erzeugen
> muss, und was darin wie stehen muss?
Ja selbstverständlich.

DOCX ist OfficeOpen XML. Die handliche Spezifikation von rund 6000 
Seiten kannst du dir bei der ISO besorgen...

Warum zum Geier will man heute noch freiwillig OOXML erzeugen?! Das war 
doch schon überholt, als es erfunden wurde.

von Peter P. (Gast)


Lesenswert?

@Nase
In was würde es man denn sonst erzeugen,
so dass es mit Word kompatibel ist?

von Nase (Gast)


Lesenswert?

Ich kenne deine Anwendung ja nicht.

Muss es denn explizit Word-kompatibel sein oder willst du eigentlich 
eher ein PDF erzeugen?

"Word" und "kompatibel" in einem Satz ist sowieso gewagt.

von Frank K. (fchk)


Lesenswert?

Peter P. schrieb:
> @Nase
> In was würde es man denn sonst erzeugen,
> so dass es mit Word kompatibel ist?

RTF

http://de.wikipedia.org/wiki/Rich_Text_Format

von Peter P. (Gast)


Lesenswert?

Ich habe im Endeffekt ein (in Word vorgegebenes) Template
(mit Kopf- und Fusszeile) und möchte die Daten, die dort eingefüllt
werden (mehr oder weniger wahrscheinlich nur Text, keine Bilder
oder sonstiges, vielleicht noch Farben und Fontgrößen/Fonts)
per Programm erzeugen. Fallback ist, die Daten per Cut&Paste
dort reinzukopieren, aber schöner wäre es,
wenn man das ganze Dokument in einem Rutsch erzeugen könnte.

Geht es mit PDF einfacher? Gibt es hier bessere Möglichkeiten?
Ist eine *.pdf Datei mehr als ein proprietäres Binary?

Laut

http://de.wikipedia.org/wiki/Portable_Document_Format

gibt es schon Varianten z.B. von XML zu PDF,
aber ob dies mein Problem mit dem Template löst?

Ich habe so etwas vor (sehr) langer Zeit mal mit
RTF (Rich Text Format) gemacht, aber bei RTF habe ich
jetzt gedacht, dass dies vielleicht nicht mehr
ganz so "state-of-the-art" ist...

http://de.wikipedia.org/wiki/Rich_Text_Format

von ich (Gast)


Lesenswert?


von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Peter P. schrieb:
> und möchte die Daten, die dort eingefüllt
> werden (mehr oder weniger wahrscheinlich nur Text, keine Bilder
> oder sonstiges, vielleicht noch Farben und Fontgrößen/Fonts) per
> Programm erzeugen.

Sofern auf dem Rechner, auf dem das geschehen soll, Word installiert 
ist, lässt sich das auch mit Word selbst erledigen. Das nämlich lässt 
sich per Automation ganz gut steuern. Diese Automation beherrscht u.a. 
das bei Windows mitgelieferte VBscript.

von Arc N. (arc)


Lesenswert?

Dr. Sommer schrieb:
> Verwende Java und Apache POI, das ist eine gute Library für MS Office
> Dokumente. Solche Dateien direkt manuell zu erzeugen ist sehr
> kompliziert, das kannst du vergessen...

U.U. kann es hier reichen ein Dokument mit eindeutigen Platzhaltern für 
den später einzufügenden Text als Vorlage zu erzeugen und das dann im 
eigenen Programm zu verarbeiten. So was in der Art wie: Docx-Zip öffnen, 
im "word"-Verzeichnis document.xml öffnen und Texte ersetzen, wieder 
alles verpacken und speichern.

https://msdn.microsoft.com/en-us/library/aa338205%28v=office.12%29.aspx
Ansonsten mit bspw. mit dem Open XML SDK arbeiten:
https://www.microsoft.com/en-us/download/details.aspx?id=30425
bzw. die Quelltexte dazu
https://github.com/OfficeDev/Open-XML-SDK

von G. H. (schufti)


Lesenswert?

oder mal google 'nen Blick auf "spire.doc" werfen lassen

: Bearbeitet durch User
von Frank (Gast)


Lesenswert?

Hab ich schon mal für den gleichen Zweck verwendet... fertiges Docx 
Template mit Messdaten, generierten Bildern und Diagrammen füllen.
Hat sehr gut funktioniert.

https://docx.codeplex.com/

von A. H. (ah8)


Lesenswert?

Peter P. schrieb:
> Geht es mit PDF einfacher? Gibt es hier bessere Möglichkeiten?

Die Liste aller Möglichkeiten wäre mit Sicherheit viel zu lang, um sie 
hier auch nur näherungsweise erschöpfend darstellen zu können. Wichtig 
wäre es zunächst einmal zu wissen, was denn das Ergebnis Deiner 
Bemühungen sein soll? Geht es um die Erstellung eines fertigen 
Dokumentes das dann nur noch verschickt, gedruckt und gelesen wird oder 
soll das erstellte Word-Dokument noch weiter bearbeitet werden?

Im ersten Fall würde ich auf Office-Pakete ganz verzichten und immer ein 
Textsatzsystem verwenden, von denen TeX/LaTeX der bekannteste Vertreter 
sein dürfte. Denen kannst Du die Inhalte in einer Markup-Sprache 
präsentieren, die sich technisch ganz einfach erzeugen lässt, eine ganze 
Liste von Anregungen dazu findest du hier:

http://docscript.sourceforge.net/docscript.pdf

Das Ergebnis lässt sich leicht in viel gängige portable Formate wandeln. 
Die benötigten Tools sind bei jeder Linux-Distribution dabei und sicher 
auch für Windows zu haben.

Ist es dagegen wichtig, dass ein Word-Dokument entsteht um es weiter 
bearbeiten zu können, dann würde ich es auf jeden Fall erst einmal über 
die Word-internen Werkzeuge versuchen. Ich habe zwar seit fast 20 Jahren 
nicht mehr mit Word gearbeitet aber jedes Office-Paket kommt heute mit 
einen Makro-Recorder und einer oder mehreren Skriptsprachen. Dabei 
bieten sich grundsätzlich zwei mögliche Ansätze: Entweder Du 
modifizierst Dein Template so, dass es sich die einzufügenden Inhalte 
selbst aus einer Datenbank oder von einem Server holt, eventuell kannst 
Du auch Programme aus Word heraus aufrufen, die die Daten liefern. Oder 
Du erzeugst aus Deinem Programm heraus eine Makro-Aufzeichnung oder ein 
Skript, das Du dann aus Word heraus aufrufst und das dann die Daten an 
den entsprechenden Stellen einfügt. Das würde ich allerdings nur 
versuchen, wenn das Dokument völlig neu erstellt wird. Das Einfügen in 
ein vorhandenes Dokument oder Template kann schnell Probleme  machen, 
wenn sich in der Vorlage irgendetwas ändert.

von Franz F. (franzman)


Lesenswert?

Ich kann für deinen Fall auch nur Latex empfehlen. Ich benutze TeXstudio 
unter Win7, funktioniert gemeinsam mit MikTex einwandfrei. Man braucht 
am Anfang zwar ein bisschen Einlernphase, danach gehts aber ziemlich 
gut. Sind vorallem viele Informationen und Tutorials im Internet.
Von dort würd ich mir mal auch auch Dokumentvorlagen herunterladen und 
anschauen, da kannst du einiges Lernen.
Ausgabe in pdf ist Problemlos möglich.

von Nase (Gast)


Lesenswert?

Peter P. schrieb:
> Geht es mit PDF einfacher? Gibt es hier bessere Möglichkeiten?

Naja, es gibt zumindest gefühlte 200 vernünftig dokumentierte 
Bibliotheken für PDF.
Word automatisieren ginge ja auch, wie schon vorgeschlagen.

Für dein Platzhalterkram würde ich aber vielleicht eher auf etwas wie 
LaTeX zurückgreifen, oder XLS-FO.

von Fritz G. (fritzg)


Lesenswert?

Ich mache es immer in Postscript, lasse einen Platzhalter ersetzen. Dann 
nach PDF konvertieren.
Postscript ist recht einfach zu verstehen.

von Dumdi D. (dumdidum)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Peter P. schrieb:
>> und möchte die Daten, die dort eingefüllt
>> werden (mehr oder weniger wahrscheinlich nur Text, keine Bilder
>> oder sonstiges, vielleicht noch Farben und Fontgrößen/Fonts) per
>> Programm erzeugen.
>
> Sofern auf dem Rechner, auf dem das geschehen soll, Word installiert
> ist, lässt sich das auch mit Word selbst erledigen. Das nämlich lässt
> sich per Automation ganz gut steuern. Diese Automation beherrscht u.a.
> das bei Windows mitgelieferte VBscript.

Hast Du hier vielleicht einen Link auf ein Beispiel wie man das konkret 
machen koennte?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ein paar allgemeine Beispiele für VBS
http://www.robvanderwoude.com/vbstech.php


Eine Sammlung von Office-Automationsdingen
https://technet.microsoft.com/library/ee332540.aspx

hieraus beispielsweise das hier:

https://technet.microsoft.com/en-US/library/59b64fd1-5a25-40cc-9b12-31fe4cc6bf82

Zum Ausprobieren den Code als *.vbs abspeichern und in der 
Konsole/Eingabeaufforderung mit cscript aufrufen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.