30 April 2013 Office, OpenXML Robert Muehsig

Durch meine Tätigkeit bei der  OneOffixx AG habe ich recht tiefe Einblicke in die Erstellung von Microsoft Office Dokumente mit .NET bekommen. Da das Problem “Office Dokumente per Code” zu erstellen recht verbreitet ist, schreib ich mal Empfehlungen für die ersten Schritte.

Must Have Tools

Ganz klar sollte man das Office in der jeweiligen Version installiert haben – zum Teil unterscheiden sich die Versionen. Für die meisten Fälle sollte es aber klappen, aber lieber nachprüfen bevor der Kunde sich ärgert ;).
Wichtiger Hinweis: OpenXML benötigt keine Office Installation. Man kann es bedenkenlos z.B. auf einem Webserver nutzen.

Das OpenXML SDK und das OpenXML SDK Productivity Tool for Microsoft Office. Die aktuellste Version ist die 2.5, welches es hier zum Download gibt – wobei man erst das SDK installieren muss und danach die Tools.

Visual Studio wäre natürlich von Vorteil ;)

Ein guten XML Viewer – Notepad ist leicht nervig. Ich nutze Nodepad++ mit den XML Tools Plugin.

OpenXML ist… kompliziert…

image

Microsofts XML Spezifikation liegt “gefühlt” sehr nah an der Ur-Implementierung im binären Format - es finden sich daher oft sehr interessante Konstrukte in XML Form wieder.

Das Bild stammt zudem von dieser Seite, welche den Standard “nicht so gern hat” – ohne Wertung von meiner Seite ;)

Da der Umgang in komplexeren Dokumenten nicht so einfach wie hier dargestellt ist empfehle ich jeden folgendes Vorgehen…

 

 

 

 

 

 

 

Vorgehen: Wunsch-Dokument erstellen – OpenXML Productivity Tool – Reflect Code FTW!

Am einfachsten ist es sich sein Wunsch-Dokument in Word/Powerpoint/Excel zu erstellen (bzw. ein bestehendes in das Tool laden) und über das Productivity Tool sich den Code dazu anzeigen lassen.

image

Der erzeugte Code ist zwar “kryptisch”, funktioniert aber (im Sinne von Copy/Paste in ein neues Projekt) und nun kann man sich Stück für Stück den Code refactoren. Das Tool kann neben “Reflect Code” auch ein Diff zwischen zwei Open XML Dateien erzeugen, zum Debugging äusserst hilfreich!

Andere Herangehensweise: Das Zip mal öffnen…

Um die Struktur genauer zu verstehen ist es auch von Vorteil die docx/pptx/xlsx Datei in .zip umzubenennen und die einzelnen XML Files genauer anzuschauen:

image

Wo liegt denn die DocumentFormat.OpenXml.dll und was brauch ich noch?

Die .NET Assembly wird mit dem SDK installiert:

C:\Program Files (x86)\Open XML SDK\V2.5\lib

Das Open XML SDK setzt auf den Namespace System.IO.Packaging auf, daher benötigt man noch die WindowsBase.dll.

Das wäre es eigentlich auch schon…

Durchbeissen und Frust-Resistenzen aufbauen ;)

Happy Coding!


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!