Auch wenn sich die Welt nach freien und quelloffenen Lösungen sehnt, Microsoft Office ist immer noch eines der bestverkauftesten Produkte auf diesen Planeten mit dem MS-Dokumentenformat als Sonne im Mittepunkt. Da die Dokumentation von Microsofts Dateiformaten mittlerweile zugänglich[1] sind, gibt es auch Java-Bibliotheken, die MS-Office-Dokumente einlesen, modifizieren und schreiben. Bekannt dafür ist Apache POI[2] (http://poi.apache.org/), was APIs für folgende Formate (Komponenten genannt) bietet:
POI-Komponete |
Aufgabe |
Grad der Unterstützung |
HSSF, XSSF |
Excel XLS, Excel XLSX |
Gut |
HSLF, XSLF |
PowerPoint PPT, PowerPoint PPTX |
Ausreichend |
HWPF, XWPF |
Word DOC, Word DOCX |
Befriedigend |
HDGF |
Visio VSD |
Rudimentär, nur lesen |
HPBF |
Publisher PUB |
Rudimentär, nur lesen |
HMEF/HSMF |
Outlook MSG/ Microsoft TNEF (Transport Neutral Encoding Format) |
Rudimentär, nur lesen |
OpenXML4J |
Open Packaging Conventions (OPC)/OOXML |
Gut |
POIFS |
OLE 2 Compound Document (OLE2 Filesystem) |
Sehr gut |
HPSF |
OLE2 Property Sets |
Sehr gut |
POI-Komponenten nach http://poi.apache.org/overview.html#components
OpenXML4J und POIFS sind keine üblichen Dokumentenformate, aber Archivformate für Microsoft-Dokumenten (analog zu Zip). HPSF erlaubt Zugriff auf Datei-Metadaten wie Autor, Titel, usw.
Neben POI gibt es nicht mehr so viele Alternativen, eher kleinere Bibliotheken, die sich auf ein Formate spezialisiert haben. So etwa http://jexcelapi.sourceforge.net/ für Excel, was eine sehr einfache und intuitive API hat, aber beim Lesen oft Probleme bereitet. Nur wurde es bisher seit 2 Jahren nicht mehr aktualisiert. Eine kommerzielle Lösung bietet Aspose (http://www.aspose.com/categories/java-components/aspose.total-for-java/default.aspx). Für den Zugriff auf MS Access Datenbanken gibt es die quelloffene Bibliothek http://jackcess.sourceforge.net/, die auch eine sehr aktuelle fluent API hat. Auf MS Access lässt sich aber auch per ODBC zurückgreifen, das Datenbankkapitel gibt eine kleine Übersicht.
Das neue Office-Format basiert auf XML und so auch deutlich einfacher zu verarbeiten als das binäre Format. Es ist im Office Open XML beschrieben. Für Word-Dokumente gibt es zum Beispiel das relativ neue Projekt java2word (http://code.google.com/p/java2word/).
Neben dem Office Open gibt es das OASIS Open Document Format – mit Dateiformaten wie OpenDocument (ODF) für Textdokumente – die etwa von OpenOffice verarbeitet werden. Eine Bibliothek zum Verarbeiten bietet das ODF Toolkit (http://odftoolkit.org/).
Fehlt noch was?
[1] http://www.microsoft.com/interop/docs/officebinaryformats.mspx
[2] POI steht für „Poor Obfuscation Implementation“, weil das Dateiformat so kryptisch ist. Die Kürzel der Komponenten beginnen in der Regel mit „H“ was für „Horrible“ steht .
Ich habe mich beruflich ausgiebig mit Asposé auseinandergesetzt. Sowohl mit den Komponentne für die Excel als auch die Word Generierung. Meine Erfahrungen sind sehr positiv.
Inzwischen habe ich eine eigene API entwickelt die als Wrapper für die Asposé API dient. Mit Hilfe dieser ist es möglich auch komplexe Dokumente (inkl. Tabellen usw.) von Grund auf zu erstellen.
Wir haben die Dokumentengenerierung von einer OpenOffice Lösung (Fernsteuerung via UNO) auf Asposé umgestellt und produzieren jetzt seit einem Jahr erfolgreich mit Asposé!
Deine Fußnoten verweisen auf Dein FileSystem [1] = file:///C:/Users/Christian/….
Für ODF gibt es auch jOpenDocument, http://jopendocument.org/