{"id":1105,"date":"2011-08-30T11:57:52","date_gmt":"2011-08-30T09:57:52","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/2011\/08\/microsoft-office-dokumente-in-java-verarbeiten\/"},"modified":"2011-08-30T11:57:52","modified_gmt":"2011-08-30T09:57:52","slug":"microsoft-office-dokumente-in-java-verarbeiten","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2011\/08\/microsoft-office-dokumente-in-java-verarbeiten\/","title":{"rendered":"Microsoft Office-Dokumente in Java verarbeiten"},"content":{"rendered":"<p>Auch wenn sich die Welt nach freien und quelloffenen L\u00f6sungen 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\u00e4nglich<a href=\"file:\/\/\/C:\/Users\/Christian\/Documents\/My Dropbox\/Insel\/#_ftn1_6688\" name=\"_ftnref1_6688\">[1]<\/a> sind, gibt es auch Java-Bibliotheken, die MS-Office-Dokumente einlesen, modifizieren und schreiben. Bekannt daf\u00fcr ist <i>Apache POI<a href=\"file:\/\/\/C:\/Users\/Christian\/Documents\/My Dropbox\/Insel\/#_ftn2_6688\" name=\"_ftnref2_6688\"><b>[2]<\/b><\/a><\/i> (<a href=\"http:\/\/poi.apache.org\/\">http:\/\/poi.apache.org\/<\/a>), was APIs f\u00fcr folgende Formate (Komponenten genannt) bietet:    <\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p><b>POI-Komponete<\/b><\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p><b>Aufgabe<\/b><\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p><b>Grad der Unterst\u00fctzung<\/b><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>HSSF, XSSF<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Excel XLS, Excel XLSX<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Gut<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>HSLF, XSLF<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>PowerPoint PPT, PowerPoint PPTX<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Ausreichend<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>HWPF, XWPF<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Word DOC, Word DOCX<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Befriedigend<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>HDGF<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Visio VSD<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Rudiment\u00e4r, nur lesen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>HPBF<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Publisher PUB<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Rudiment\u00e4r, nur lesen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>HMEF\/HSMF<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Outlook MSG\/ Microsoft TNEF (Transport Neutral Encoding Format) <\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Rudiment\u00e4r, nur lesen<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>OpenXML4J<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Open Packaging Conventions (OPC)\/OOXML<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Gut<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>POIFS<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>OLE 2 Compound Document (OLE2 Filesystem)<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Sehr gut<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"256\">\n<p>HPSF<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>OLE2 Property Sets<\/p>\n<\/td>\n<td valign=\"top\" width=\"256\">\n<p>Sehr gut<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>POI-Komponenten nach <a href=\"http:\/\/poi.apache.org\/overview.html#components\">http:\/\/poi.apache.org\/overview.html#components<\/a><\/p>\n<p>OpenXML4J und POIFS sind keine \u00fcblichen Dokumentenformate, aber Archivformate f\u00fcr Microsoft-Dokumenten (analog zu Zip). HPSF erlaubt Zugriff auf Datei-Metadaten wie Autor, Titel, usw.<\/p>\n<p>Neben POI gibt es nicht mehr so viele Alternativen, eher kleinere Bibliotheken, die sich auf ein Formate spezialisiert haben. So etwa <a href=\"http:\/\/jexcelapi.sourceforge.net\/\">http:\/\/jexcelapi.sourceforge.net\/<\/a> f\u00fcr 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\u00f6sung bietet Aspose (<a href=\"http:\/\/www.aspose.com\/categories\/java-components\/aspose.total-for-java\/default.aspx\">http:\/\/www.aspose.com\/categories\/java-components\/aspose.total-for-java\/default.aspx<\/a>). F\u00fcr den Zugriff auf MS Access Datenbanken gibt es die quelloffene Bibliothek <a href=\"http:\/\/jackcess.sourceforge.net\/\">http:\/\/jackcess.sourceforge.net\/<\/a>, die auch eine sehr aktuelle fluent API hat. Auf MS Access l\u00e4sst sich aber auch per ODBC zur\u00fcckgreifen, das Datenbankkapitel gibt eine kleine \u00dcbersicht.<\/p>\n<p>Das neue Office-Format basiert auf XML und so auch deutlich einfacher zu verarbeiten als das bin\u00e4re Format. Es ist im Office Open XML beschrieben. F\u00fcr Word-Dokumente gibt es zum Beispiel das relativ neue Projekt java2word (<a href=\"http:\/\/code.google.com\/p\/java2word\/\">http:\/\/code.google.com\/p\/java2word\/<\/a>).<\/p>\n<p>Neben dem Office Open gibt es das <i>OASIS Open Document Format<\/i> \u2013 mit Dateiformaten wie OpenDocument (ODF) f\u00fcr Textdokumente \u2013 die etwa von OpenOffice verarbeitet werden. Eine Bibliothek zum Verarbeiten bietet das ODF Toolkit (<a href=\"http:\/\/odftoolkit.org\/\">http:\/\/odftoolkit.org\/<\/a>).<\/p>\n<p>&#160;<\/p>\n<p><strong>Fehlt noch was?<\/strong><\/p>\n<hr align=\"left\" size=\"1\" width=\"33%\" \/>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian\/Documents\/My Dropbox\/Insel\/#_ftnref1_6688\" name=\"_ftn1_6688\">[1]<\/a> <a href=\"http:\/\/www.microsoft.com\/interop\/docs\/officebinaryformats.mspx\">http:\/\/www.microsoft.com\/interop\/docs\/officebinaryformats.mspx<\/a><\/p>\n<p><a href=\"file:\/\/\/C:\/Users\/Christian\/Documents\/My Dropbox\/Insel\/#_ftnref2_6688\" name=\"_ftn2_6688\">[2]<\/a> POI steht f\u00fcr \u201ePoor Obfuscation Implementation\u201c, weil das Dateiformat so kryptisch ist. Die K\u00fcrzel der Komponenten beginnen in der Regel mit \u201eH\u201c was f\u00fcr \u201eHorrible\u201c steht .<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Auch wenn sich die Welt nach freien und quelloffenen L\u00f6sungen 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\u00e4nglich[1] sind, gibt es auch Java-Bibliotheken, die MS-Office-Dokumente einlesen, modifizieren und schreiben. Bekannt daf\u00fcr ist Apache POI[2] (http:\/\/poi.apache.org\/), [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[11],"tags":[],"class_list":["post-1105","post","type-post","status-publish","format-standard","hentry","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=1105"}],"version-history":[{"count":0,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/1105\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=1105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=1105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=1105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}