Lesen und Schreiben von Excel-Tabellen

Die Open-Source-Community hat viele Open-Source-Java-Projekte erstellt, die von Diagrammsoftware über Spiel-Frameworks bis hin zu Textverarbeitungsprogrammen reichen. In diesem Beitrag stelle ich ein Open Source-Bibliotheksprojekt zum Lesen und Schreiben von Microsoft Excel-Tabellen vor.

Empfehlung einer Tabellenkalkulationsbibliothek

F: Ich wurde gebeten, die Java-basierte Tabellenkalkulationssoftware meines Unternehmens zu erweitern, um Excel-Tabellen zu lesen und zu schreiben. Können Sie eine Open-Source-Java-Bibliothek empfehlen, die mir bei dieser Aufgabe hilft?

A: Vielleicht möchten Sie JExcelAPI ausprobieren, eine ausgereifte, Java-basierte Open Source-Bibliothek, mit der Sie Excel-Tabellen lesen, schreiben und ändern können. Hier sind einige der vielen Funktionen:

  • Liest Daten aus Excel 95-, 97-, 2000-, XP- und 2003-Arbeitsmappen
  • Liest und schreibt Formeln (nur Excel 97 und höher)
  • Generiert Tabellenkalkulationen im Excel 2000-Format
  • Unterstützt die Formatierung von Schriftart, Nummer und Datum
  • Unterstützt Zellschattierung, Zellrandung und Zellfärbung
  • Ändert vorhandene Arbeitsblätter
  • Unterstützt das Kopieren von Diagrammen
  • Unterstützt das Einfügen und Kopieren von Bildern in Tabellenkalkulationen

JExcelAPI wurde von Andrew Kahn entwickelt und unter der GNU Lesser General Public License veröffentlicht.

Herunterladen der JExcelAPI-Bibliothek

F: Wie lade ich JExcelAPI herunter?

A: Führen Sie die folgenden Schritte aus, um JExcelAPI herunterzuladen:

  1. Zeigen Sie mit Ihrem Browser auf die SourceForge-Site von JExcelAPI.
  2. Klicken Sie auf den jexcelapiLink.
  3. Klicken Sie auf der resultierenden Seite auf einen der Ordnerlinks. Zum Beispiel habe ich auf den 2.6.12Link geklickt .
  4. Klicken Sie auf der resultierenden Seite auf den Dateinamen des Verteilungsarchivs. Zum Beispiel habe ich auf den jexcelapi_2_6_12.zipLink geklickt .
  5. Nach einer kurzen Verzögerung sollte Ihr Browser Sie auffordern, diese Datei zu speichern. Fahren Sie fort und speichern Sie die Datei.

Archivieren Sie diese Datei nach dem Download. Sie sollten ein jexcelapiHome-Verzeichnis innerhalb eines jexcelapi_2_6_12Verzeichnisses beobachten.

Demonstration der JExcelAPI-Bibliothek

F: Enthält die JExcelAPI-Bibliothek Demos?

A: Das Ausgangsverzeichnis von JExcelAPI jexcelapienthält eine jxl.jarDatei, die Demos zum Lesen, Schreiben und Kopieren von Tabellen enthält.

In der Lesedemo wird eine vorhandene Tabelle gelesen und über die Befehlszeilenoption -csvoder in ein CSV-Format (Comma Separated Value) oder ein XML-Format konvertiert -xml. Betrachten Sie die folgenden Beispiele:

java -jar jxl.jar -csv budget.xls java -jar jxl.jar -xml budget.xls

In diesen Beispielen budget.xlswird der Inhalt im CSV- und XML-Format gelesen und in der Standardausgabe ausgegeben. Wenn weder -csvnoch -xmlangegeben ist, -csvwird angenommen.

Die Schreibdemo erstellt eine Beispieltabelle mit Formeln, Rahmen, Bildern und mehr. Diese Tabelle wird durch Angabe der -writeBefehlszeilenoption generiert , wie unten gezeigt:

java -jar jxl.jar -write sample.xls

Abbildung 1 zeigt einen Teil der resultierenden sample.xlsTabelle.

Abbildung 1. Ich habe LibreOffice Calc verwendet, um auf die Tabelle sample.xls zuzugreifen

Die Kopierdemo kopiert eine Beispieltabelle jxlrwtest.xls, die im selben Verzeichnis wie gespeichert ist jxl.jar, in eine neue Tabelle. In der resultierenden Tabelle bleibt das erste Blatt (Original) unverändert, während das zweite Blatt (geändert) geänderte Werte enthält.

Diese Demo wird generiert, indem die -rwBefehlszeilenoption gefolgt von jxlrwtest.xlsund der Name der Ausgabe-Tabelle angegeben werden. Betrachten Sie die folgende Befehlszeile:

java -jar jxl.jar -rw jxlrwtest.xls copy.xls

Diese Befehlszeile kopiert jxlrwtest.xlsnach copy.xls. Abbildung 2 zeigt das zweite (modifizierte) Blatt in LibreOffice Calc.

Abbildung 2. Klicken Sie auf die Registerkarten "Original" und "Geändert", um das Original und die geänderten Blätter anzuzeigen

Einschließlich JExcelAPI zum Kompilieren und Ausführen

F: Wie kann ich JExcelAPI beim Kompilieren von Quellcode und Ausführen einer Anwendung einbinden?

A: Führen Sie einen der folgenden Schritte aus, um JExcelAPI beim Kompilieren von Quellcode und Ausführen einer Anwendung einzuschließen:

  • Fügen Sie die Datei jexcelapides jxl.jarBasisverzeichnisses zu Ihrer CLASSPATHUmgebungsvariablen hinzu.
  • Fügen Sie jxl.jarüber das javacund javadas Programm -cpBefehlszeilenoption.

Programmieren mit JExcelAPI

F: Wie erstelle ich Java-Programme, die JExcelAPI nutzen?

A: Das jexcelapiHome-Verzeichnis enthält eine tutorial.htmlDatei, die ein grundlegendes Tutorial zum Programmieren mit JExcelAPI enthält. Das Tutorial zeigt Ihnen, wie Sie Tabellen lesen, schreiben und kopieren. Das Tutorial behandelt auch die Formatierung.

jexcelapienthält auch ein docsUnterverzeichnis, das Zugriff auf umfangreiche API-Dokumentation bietet. Zeigen Sie mit Ihrem Webbrowser auf die index.htmlDatei dieses Verzeichnisses, und Sie können die Typen in den vier dokumentierten Paketen dieser Bibliothek untersuchen:

  • jxl: die Typen des Hauptpakets
  • jxl.demo: Typen für die verschiedenen Demos
  • jxl.format: Typen im Zusammenhang mit der Formatierung
  • jxl.write: Typen zum Schreiben in eine Tabelle

Note that this list isn't exhaustive. Additional packages such as jxl.read are present but are not documented. To learn about additional packages, execute jar tvf jxl.jar and examine the package information in the resulting JAR listing.

To help you get started with JExcelAPI, I've created a simple JExcelAPIDemo application that demonstrates creating a new spreadsheet that is saved in output.xls and then reading and outputting the contents of this spreadsheet. Check out Listing 1.

Listing 1. Writing and reading a simple spreadsheet

import java.io.File; import java.io.IOException; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.BiffException; import jxl.write.Label; import jxl.write.Number; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; public class JExcelAPIDemo { public static void main(String[] args) throws BiffException, IOException, WriteException { WritableWorkbook wworkbook; wworkbook = Workbook.createWorkbook(new File("output.xls")); WritableSheet wsheet = wworkbook.createSheet("First Sheet", 0); Label label = new Label(0, 2, "A label record"); wsheet.addCell(label); Number number = new Number(3, 4, 3.1459); wsheet.addCell(number); wworkbook.write(); wworkbook.close(); Workbook workbook = Workbook.getWorkbook(new File("output.xls")); Sheet sheet = workbook.getSheet(0); Cell cell1 = sheet.getCell(0, 2); System.out.println(cell1.getContents()); Cell cell2 = sheet.getCell(3, 4); System.out.println(cell2.getContents()); workbook.close(); } }

Listing 1 first creates a writable workbook by invoking one of Workbook's factory methods. A writable sheet is then created for this workbook, and then a label and a number are added as the sheet's two cell values. The workbook is then written and closed.

Listing 1 continues by getting a workbook associated with output.xls and reading its contents. The getSheet() method provides access to the first sheet within this workbook. Its getCell() method is called to access the two cells, whose contents are then output.

Assuming that jxl.jar is located in the current directory, execute the following command to compile Listing 1:

javac -cp jxl.jar JExcelAPIDemo.java

Assuming success, execute the following command to run JExcelAPIDemo:

java -cp jxl.jar;. JExcelAPIDemo

You should observe the following output:

A label record 3.146

Figure 3 shows you output.xls in a LibreOffice context.

Figure 3. The solitary sheet displays two cell values

What's next?

Das nächste Mal stelle ich eine Reihe von Rätseln vor, die sich mit der Entwicklung von Java-Bibliotheken befassen. Diese Rätsel konzentrieren sich auf die Kompatibilität von Quell- und Binärcode zwischen Client-Programmen und den von diesen Programmen verwendeten Bibliotheken.

download Quellcode herunterladen Holen Sie sich den Quellcode für die Anwendungen dieses Beitrags. Erstellt von Jeff Friesen für JavaWorld

Die folgende Software wurde verwendet, um den Code des Beitrags zu entwickeln:

  • 64-Bit-JDK 7u6
  • JExcelAPI 2.6.12

Die Postleitzahl wurde auf folgenden Plattformen getestet:

  • JVM unter 64-Bit Windows 7 SP1

Diese Geschichte "Lesen und Schreiben von Excel-Tabellen" wurde ursprünglich von JavaWorld veröffentlicht.