Schreiben von Microsoft Office Dateien mit Java Dietmar Steinbichler 1 Das Apache Jakarta Projekt z z z 2 Das Apache Jakarta Projekt erzeugt und verwaltet Open Source Projekte, die für Jedermann kostenlos zur Verfügung stehen. Programmiersprache in allen Projekten ist Java. Ein Teilprojekt ist POI. Schreiben von Microsoft Office Datein mit Java 16.12.2003 1 Das POI Projekt Das POI Projekt besteht aus Java-APIs zum Erstellen und Bearbeiten von Dateiformaten, die auf dem Microsoft-Dateiformat »OLE-2 Compound Document« beruhen. In diesem Format sind unter anderem die meisten Microsoft Office Dateien, wie zum Beispiel Excel und Word Dateien. 3 Schreiben von Microsoft Office Datein mit Java 16.12.2003 Formate im POI Projekt z z z z 4 POIFS – HWPF – HSSF – HPSF – POI File System Horrible Wordpad Format Horrible Spreadsheet Format Horrible Property Set Format Schreiben von Microsoft Office Datein mit Java 16.12.2003 2 POIFS – Das POI File System POIFS ist die Java Implementierung des »OLE-2 Compound Document« Formats. Alle APIs im POI Projekt benutzen POIFS in irgendeiner Weise. 5 Schreiben von Microsoft Office Datein mit Java 16.12.2003 HWPF – Java API zum Zugriff auf Microsoft Word Dateien HWPF ist noch nicht sehr weit entwickelt, jedoch sind einfache Lese- und Schreibfunktionen bereits implementiert. 6 Schreiben von Microsoft Office Datein mit Java 16.12.2003 3 HSSF – Java API zum Zugriff auf Microsoft Excel Dateien HSSF ist der am weitesten entwickelte Teil des POI Projekts. HSSF unterstützt fast alle Operationen mit Excel Tabellen bis auf Makros, Diagramme und Pivot Tabellen. 7 Schreiben von Microsoft Office Datein mit Java 16.12.2003 Beispiele 1. 2. 3. 8 Word Dokument mit HWPF lesen und schreiben Excel Datei mit HSSF auslesen Excel Datei mit HSSF schreiben Schreiben von Microsoft Office Datein mit Java 16.12.2003 4 Klassenstruktur HWPF HWPFDocument Range CharacterRun 9 Schreiben von Microsoft Office Datein mit Java Dokument Bereich Schriftarten/Formate 16.12.2003 HWPF Beispiel 10 Schreiben von Microsoft Office Datein mit Java 16.12.2003 5 HWPF Beispiel (1) Datei öffnen und Infos auslesen // Dokument HWPFDocument doc = new HWPFDocument(new FileInputStream("doc\\read.doc")); // Bereich Range range = doc.getRange(); // Schriftart CharacterRun run; // Anzahl der Zeilenumbrüche ausgeben System.out.println("Das Dokument enthält:\t" + range.numParagraphs() + " Zeilenumbrüche,"); // Anzahl der Abschnitte ausgeben System.out.println("\t\t\t" + range.numSections() + " Abschnitte,"); // Anzahl der Schrifarten ausgeben System.out.println("und\t\t\t" + range.numCharacterRuns() + " Schriftarten."); 11 Schreiben von Microsoft Office Datein mit Java 16.12.2003 HWPF Beispiel (2) Schriftarten abfragen // Info über Schriftarten ausgeben System.out.println("----- Schriftarten -----"); for (int i=0; i<range.numCharacterRuns(); i++) { run = range.getCharacterRun(i); System.out.print ("Font " + (i+1) + ": "); System.out.print ("Fontgröße:" + run.getFontSize()); System.out.println(", Zeichenabstand:" + run.getCharacterSpacing()); } 12 Schreiben von Microsoft Office Datein mit Java 16.12.2003 6 HWPF Beispiel (3) Inhalt ausgeben und ergänzen // Inhalt ausgeben String content = range.text(); System.out.println("----- Inhalt: -----"); System.out.println(content); System.out.println("-------------------"); // Ein Paar Worte hinzufügen range.insertBefore("*** von HWPF eingefügt ***"); 13 Schreiben von Microsoft Office Datein mit Java 16.12.2003 HWPF Beispiel (4) Dokument schreiben und schließen // Ausgabestream öffnen OutputStream out = new FileOutputStream("doc\\Write.doc"); // Ausgabedokument schreiben doc.write(out); // Ausgabestream schließen out.flush(); out.close(); 14 Schreiben von Microsoft Office Datein mit Java 16.12.2003 7 Klassenstruktur HSSF HSSFWorkbook Mappe HSSFSheet Tabelle HSSFRow Zeile HSSFCell Zelle HSSFCellStyle 15 Zellformat Schreiben von Microsoft Office Datein mit Java 16.12.2003 HSSF Beispiel – Lesen 16 Schreiben von Microsoft Office Datein mit Java 16.12.2003 8 HSSF Beispiel – Lesen (1) Excel Mappe öffnen und Objekte erzeugen // Excel Mappe öffnen HSSFWorkbook wb = new HSSFWorkbook( new FileInputStream("doc\\Read.xls")); // Tabelle1 auswählen HSSFSheet sh = wb.getSheet("Tabelle1"); // Objektreferenz auf Zeile erzeugen HSSFRow row = null; // Objektreferenz auf Zelle erzeugen HSSFCell cell = null; 17 Schreiben von Microsoft Office Datein mit Java 16.12.2003 HSSF Beispiel – Lesen (2) Zelleninhalte ausgeben // Für jede Zeile for (int i=0; i<=sh.getLastRowNum(); i++) { // Zeile auswählen row = sh.getRow(i); // Für jede Zelle in der Zeile for (int j=0; j<row.getLastCellNum(); j++) { // Zelle auswählen cell = row.getCell((short) j); // Zelleninhalt ausgeben System.out.print ("Zelle[" + i + "," + j + "] = " ); System.out.println(cell.getStringCellValue()); } } 18 Schreiben von Microsoft Office Datein mit Java 16.12.2003 9 HSSF Beispiel – Schreiben 19 Schreiben von Microsoft Office Datein mit Java 16.12.2003 HSSF Beispiel – Schreiben (1) Objekte erzeugen // Neue Mappe erzeugen HSSFWorkbook wb = new HSSFWorkbook(); // Neue Tabelle erzeugen HSSFSheet sh = wb.createSheet(); // Objektreferenz auf Reihe erzeugen HSSFRow row = null; // Objektreferenz auf Zelle erzeugen HSSFCell cell = null; // Zellformat Objekt erzeugen HSSFCellStyle csty = wb.createCellStyle(); // Datenformat Objekt erzeugen HSSFDataFormat df = wb.createDataFormat(); 20 Schreiben von Microsoft Office Datein mit Java 16.12.2003 10 HSSF Beispiel – Schreiben (2) Schriftart einstellen // Font-Objekt erzeugen HSSFFont font = wb.createFont(); // Schriftgröße auf 12pt einstellen font.setFontHeightInPoints((short) 12); // Schriftfarbe blau font.setColor((short)0xC); // Schriftart font.setFontName("Times New Roman"); // Fett font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // Schriftart auf Zellformat-Objekt anwenden csty.setFont(font); 21 Schreiben von Microsoft Office Datein mit Java 16.12.2003 HSSF Beispiel – Schreiben (3) Rahmen einstellen // Rahmen einstellen csty.setBorderBottom(HSSFCellStyle.BORDER_THIN); csty.setBottomBorderColor(HSSFColor.PINK.index); csty.setBorderLeft(HSSFCellStyle.BORDER_THICK); 22 Schreiben von Microsoft Office Datein mit Java 16.12.2003 11 HSSF Beispiel – Schreiben (4) Zellen schreiben // Tabelle mit 30 Zeilen erzeugen for (short rownum = 0; rownum < 30; rownum++) { // Zeile erzeugen row = sh.createRow(rownum); // Für jede Zelle der Reihe for (short cellnum = 0; cellnum < 10; cellnum += 2) { // String Zelle erzeugen cell = row.createCell((short) (cellnum + 1)); // Format setzen cell.setCellStyle(csty); // String eintragen cell.setCellValue( "HSSF Test" ); } } 23 Schreiben von Microsoft Office Datein mit Java 16.12.2003 HSSF Beispiel – Schreiben (5) Fenster fixieren und Zoom setzen // Eine Zeile und eine Spalte fixieren sh.createFreezePane( 1, 1); // Zoom auf 75% setzen sh.setZoom(3,4); 24 Schreiben von Microsoft Office Datein mit Java 16.12.2003 12 HSSF Beispiel – Schreiben (6) Datei schreiben und schließen // Ausgabedatei ereugen FileOutputStream out = new FileOutputStream("doc\\Write.xls"); // Mappe schreiben und Datei schließen wb.write(out); out.close(); 25 Schreiben von Microsoft Office Datein mit Java 16.12.2003 Schreiben von Microsoft Office Dateien mit Java http://jakarta.apache.org/poi/ 26 Schreiben von Microsoft Office Datein mit Java 16.12.2003 13