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:
- Zeigen Sie mit Ihrem Browser auf die SourceForge-Site von JExcelAPI.
- Klicken Sie auf den
jexcelapi
Link. - Klicken Sie auf der resultierenden Seite auf einen der Ordnerlinks. Zum Beispiel habe ich auf den
2.6.12
Link geklickt . - Klicken Sie auf der resultierenden Seite auf den Dateinamen des Verteilungsarchivs. Zum Beispiel habe ich auf den
jexcelapi_2_6_12.zip
Link geklickt . - 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 jexcelapi
Home-Verzeichnis innerhalb eines jexcelapi_2_6_12
Verzeichnisses beobachten.
Demonstration der JExcelAPI-Bibliothek
F: Enthält die JExcelAPI-Bibliothek Demos?
A: Das Ausgangsverzeichnis von JExcelAPI jexcelapi
enthält eine jxl.jar
Datei, die Demos zum Lesen, Schreiben und Kopieren von Tabellen enthält.
In der Lesedemo wird eine vorhandene Tabelle gelesen und über die Befehlszeilenoption -csv
oder 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.xls
wird der Inhalt im CSV- und XML-Format gelesen und in der Standardausgabe ausgegeben. Wenn weder -csv
noch -xml
angegeben ist, -csv
wird angenommen.
Die Schreibdemo erstellt eine Beispieltabelle mit Formeln, Rahmen, Bildern und mehr. Diese Tabelle wird durch Angabe der -write
Befehlszeilenoption generiert , wie unten gezeigt:
java -jar jxl.jar -write sample.xls
Abbildung 1 zeigt einen Teil der resultierenden sample.xls
Tabelle.
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 -rw
Befehlszeilenoption gefolgt von jxlrwtest.xls
und 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.xls
nach 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
jexcelapi
desjxl.jar
Basisverzeichnisses zu IhrerCLASSPATH
Umgebungsvariablen hinzu. - Fügen Sie
jxl.jar
über dasjavac
undjava
das Programm-cp
Befehlszeilenoption.
Programmieren mit JExcelAPI
F: Wie erstelle ich Java-Programme, die JExcelAPI nutzen?
A: Das jexcelapi
Home-Verzeichnis enthält eine tutorial.html
Datei, 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.
jexcelapi
enthält auch ein docs
Unterverzeichnis, das Zugriff auf umfangreiche API-Dokumentation bietet. Zeigen Sie mit Ihrem Webbrowser auf die index.html
Datei dieses Verzeichnisses, und Sie können die Typen in den vier dokumentierten Paketen dieser Bibliothek untersuchen:
jxl
: die Typen des Hauptpaketsjxl.demo
: Typen für die verschiedenen Demosjxl.format
: Typen im Zusammenhang mit der Formatierungjxl.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 JavaWorldDie 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.