Java-Import und Export von Excel-Operationen (JXL)
Java interpretiert Excel-Daten (Verwendung des Pakets jxl.jar)
Schlüsselwörter: Java Excel jxl.jar
Download-Adresse des jxl.jar-Pakets:
http://www.andykhan.com/jexcelapi/
Echte Download-Adresse:
http://www.andykhan.com/jexcelapi/download.html
Seine Eigenschaften werden auf der Website wie folgt beschrieben:
● Unterstützt alle Versionen von Excel 95-2000 ● Erzeugt das Excel 2000-Standardformat ● Unterstützt Schriftart-, Zahlen- und Datumsoperationen ● Kann Zellattribute ändern ● Unterstützt Bilder und Diagramme Es sollte gesagt werden, dass die oben genannten Funktionen in etwa unseren Anforderungen entsprechen können. Das Wichtigste ist, dass diese API reines Java ist und nicht vom Windows-System abhängt. Auch wenn sie unter Linux läuft, kann sie Excel-Dateien trotzdem korrekt verarbeiten. Es sollte auch beachtet werden, dass dieser API-Satz nur sehr begrenzte Unterstützung für Grafiken und Diagramme bietet und nur das PNG-Format erkennt.
Um die Umgebung zu erstellen, entpacken Sie die heruntergeladene Datei, um jxl.jar zu erhalten, fügen Sie sie in den Klassenpfad ein und die Installation ist abgeschlossen.
Grundlegende Operationen
1. Erstellen Sie die Datei, um eine Excel-Datei mit dem Namen „Test Data.xls“ zu generieren, in der das erste Arbeitsblatt den Namen „Erste Seite“ trägt. Der allgemeine Effekt ist wie folgt:
Java-Code
/*
* Erstellt am 30. Dezember 2007
*
* Um die Vorlage für diese generierte Datei zu ändern, gehen Sie zu
* Fenster > Einstellungen > Java > Codegenerierung > Code und Kommentare
*/
Paket JExcelTest.standard;
java.io.* importieren;
jxl importieren.*;
import jxl.write.*;
/**
* @Autor Ken
*
* Um die Vorlage für diesen generierten Typkommentar zu ändern, gehen Sie zu
* Fenster > Einstellungen > Java > Codegenerierung > Code und Kommentare
*/
öffentliche Klasse CreateXLS {
public static void main(String[] args) {
versuchen {
//Datei öffnen.
WritableWorkbook book = Workbook.createWorkbook(new File("d:/Test.xls"));
//Blatt mit dem Namen „Blatt_1“ erstellen. 0 bedeutet, dass dies die 1. Seite ist.
WritableSheet sheet = book.createSheet("Sheet_1", 0);
// Zellenspalte und -zeile im Label-Konstruktor definieren und Zelleninhalt mit „test“ schreiben.
//Zelle ist 1. Spalte, 1. Zeile, Wert ist „test“.
Label label = new Label(0, 0, „test“);
//Definierte Zelle oben zur Blattinstanz hinzufügen.
sheet.addCell(label);
//Zelle mit add numeric erstellen. WARNUNG: Unbedingt den integrierten Paketpfad verwenden, andernfalls wird ein Pfadfehler ausgegeben.
//Zelle ist 2. Spalte, 1. Zeile Wert ist 789,123.
jxl.write.Number number = new jxl.write.Number(1, 0, 789.123);
//Definierte Zelle oben zur Blattinstanz hinzufügen.
sheet.addCell(number);
//Alle oben definierten Zellen zur Groß-/Kleinschreibung hinzufügen.
book.write();
//Aktenfall schließen.
book.close();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
}
Nachdem Java kompiliert und ausgeführt wurde, wird am aktuellen Speicherort eine Excel-Datei generiert.
2. Lesen Sie die Datei, die wir gerade erstellt haben, um einen einfachen Lesevorgang durchzuführen.
Java-Code
/*
* Erstellt am 30. Dezember 2007
*
* Um die Vorlage für diese generierte Datei zu ändern, gehen Sie zu
* Fenster > Einstellungen > Java > Codegenerierung > Code und Kommentare
*/
Paket JExcelTest.standard;
java.io.* importieren;
jxl importieren.*;
/**
* @Autor Ken
*
* Um die Vorlage für diesen generierten Typkommentar zu ändern, gehen Sie zu
* Fenster > Einstellungen > Java > Codegenerierung > Code und Kommentare
*/
öffentliche Klasse ReadXLS {
public static void main(String[] args) {
versuchen {
Workbook book = Workbook.getWorkbook(new File("d:/Test.xls"));
//ein Sheet-Objekt abrufen.
Blatt sheet = book.getSheet(0);
//Inhalt der ersten Spalte und der ersten Zeile abrufen.
Zelle cell = sheet.getCell(0, 0);
String result = cell.getContents();
System.out.println(result);
book.close();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
}
Ergebnis der Programmausführung: Test
3. Dateien ändern Sie können jExcelAPI verwenden, um vorhandene Excel-Dateien zu ändern. Beim Ändern von Excel-Dateien sind die anderen Vorgänge mit Ausnahme der unterschiedlichen Möglichkeiten zum Öffnen der Datei dieselben wie beim Erstellen von Excel. Das folgende Beispiel fügt der von uns generierten Excel-Datei ein Arbeitsblatt hinzu:
Ändern Sie die Excel-Klasse und fügen Sie ein Arbeitsblatt hinzu
Java-Code
/*
* Erstellt am 30. Dezember 2007
*
* Um die Vorlage für diese generierte Datei zu ändern, gehen Sie zu
* Fenster > Einstellungen > Java > Codegenerierung > Code und Kommentare
*/
Paket JExcelTest.standard;
java.io.* importieren;
jxl importieren.*;
import jxl.write.*;
/**
* @Autor Ken
*
* Um die Vorlage für diesen generierten Typkommentar zu ändern, gehen Sie zu
* Fenster > Einstellungen > Java > Codegenerierung > Code und Kommentare
*/
öffentliche Klasse UpdateXLS {
public static void main(String[] args) {
versuchen {
//Datei abrufen.
Workbook wb = Workbook.getWorkbook(new File("d:/Test.xls"));
//Öffne eine Kopierdatei (neue Datei) und schreibe dann mit Test.xls Inhalte mit demselben Inhalt.
WritableWorkbook book =
Workbook.createWorkbook(new File("d:/Test.xls"), wb);
//ein Blatt hinzufügen.
WritableSheet sheet = book.createSheet("Sheet_2", 1);
sheet.addCell(new Label(0, 0, "test2"));
book.write();
book.close();
} Catch (Ausnahme e) {
e.printStackTrace();
}
}
}
Erweiterte Operationen
1. Die Datenformatierung in Excel erfordert keine komplexen Datentypen. Sie kann Zeichenfolgen, Zahlen und Datumsangaben relativ gut verarbeiten und ist für allgemeine Anwendungen ausreichend.
String-Formatierung Die String-Formatierung umfasst Elemente wie Schriftart, Schriftstärke, Schriftgröße usw. Diese Funktionen sind hauptsächlich für die Klassen WritableFont und WritableCellFormat verantwortlich. Angenommen, wir verwenden die folgende Anweisung beim Generieren einer Zelle, die eine Zeichenfolge enthält. Zur Vereinfachung der Beschreibung nummerieren wir jede Befehlszeile:
WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD);
oder
//Stellen Sie das Schriftformat auf ein von Excel unterstütztes Format ein
WritableFont font3=new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );
① WritableCellFormat format1=new WritableCellFormat(font1);
② Label label=new Label(0,0“,Daten 4 Test“,Format1)
③ Unter ihnen
I. Das String-Format ist angegeben: Die Schriftart ist TIMES, die Schriftgröße ist 16 und die Schrift wird fett angezeigt. WritableFont verfügt über einen sehr umfangreichen Satz von Konstruktoren zur Verwendung in verschiedenen Situationen. Eine detaillierte Liste finden Sie im Java-Dokument von jExcelAPI, die hier nicht aufgeführt wird.
II. Der obige Code verwendet die Klasse WritableCellFormat. Durch sie können verschiedene Attribute der Zelle angegeben werden.
III. Der Konstruktor der Label-Klasse wird verwendet, um das Format anzugeben, das der Zeichenfolge zugewiesen wird. In der Klasse WritableCellFormat besteht eine weitere sehr wichtige Methode darin, die Ausrichtung der Daten anzugeben. Für unser Beispiel oben können Sie beispielsweise Folgendes angeben.
//Geben Sie die horizontale Ausrichtung als zentriert an
format1.setAlignment(jxl.format.Alignment.CENTRE);
//Geben Sie die vertikale Ausrichtung als zentriert an
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
//Automatischen Zeilenumbruch festlegen
format1.setWrap(true);
2. Zelloperationen
Ein sehr wichtiger Teil von Excel ist die Funktion von Zellen, wie z. B. Zeilenhöhe, Spaltenbreite, Zellzusammenführung usw. Glücklicherweise bietet jExcelAPI diese Unterstützung. Diese Vorgänge sind relativ einfach und im Folgenden werden nur die relevanten APIs vorgestellt.
1. Zellen zusammenführen
WritableSheet.mergeCells(int m,int n,int p,int q);
Die Funktion besteht darin, alle Zellen von (m,n) bis (p,q) zusammenzuführen, zum Beispiel:
WritableSheet sheet=book.createSheet("First Page",0);
//Füge alle Zellen von der ersten Zeile der ersten Spalte bis zur ersten Zeile der sechsten Spalte zusammen
sheet.mergeCells(0,0,5,0);
Fusionen können entweder horizontal oder vertikal erfolgen. Zusammengeführte Zellen können nicht erneut zusammengeführt werden, da sonst eine Ausnahme ausgelöst wird.
2. Zeilenhöhe und Spaltenbreite
WritableSheet.setRowView(int i,int height);
Die Funktion besteht darin, die Höhe der i+1. Zeile anzugeben, zum Beispiel:
//Setzen Sie die Höhe der ersten Zeile auf 200
sheet.setRowView(0,200);
WritableSheet.setColumnView(int i,int width);
Seine Funktion besteht darin, die Breite der Spalte i+1 anzugeben, zum Beispiel:
//Setzen Sie die Breite der ersten Spalte auf 30
sheet.setColumnView(0,30);
3. Operationsbilder
Java-Code
public static void write()throws Exception{
WritableWorkbook wwb=Workbook.createWorkbook(new File("c:/1.xls"));
WritableSheet ws=wwb.createSheet("Test Sheet 1",0);
Datei file=new File("C:\jbproject\PVS\WebRoot\weekhit\1109496996281.png");
WritableImage image=new WritableImage(1, 4, 6, 18,file);
ws.addImage(image);
wwb.write();
wwb.close();
}
Es ist sehr einfach und das gleiche wie das Einfügen von Zellen, aber es hat mehr Parameter. Die obige Klasse ist nur eine ihrer Konstruktionsmethoden nach x, y, Breite, Höhe. Beachten Sie, dass die Breite und Höhe hier nicht die Breite und Höhe des Bildes sind, sondern die Anzahl der Einheiten, die das Bild einnimmt. Da es Draw erbt, muss sein Typ doppelt sein. Ich habe mich nicht mit den Details der Implementierung befasst :) Da ich in Eile bin, werde ich zuerst die Funktionen abschließen und später Zeit haben, den Rest zu studieren. Ich werde meine Erfahrungen im Umgang damit auch in Zukunft weiter aufschreiben.
lesen:
Beim Lesen sieht die Idee so aus: Verwenden Sie zuerst einen Eingabestream (InputStream), um die Excel-Datei abzurufen, verwenden Sie dann die Arbeitsmappe in jxl, um die Arbeitsmappe abzurufen, und verwenden Sie Sheet, um das Arbeitsblatt aus der Arbeitsmappe abzurufen, und verwenden Sie Cell, um eine zu erhalten Bestimmter Punkt in der Arbeitsblattzelle.
InputStream->Workbook->Sheet->Cell, Sie erhalten die Zellen in der Excel-Datei
Java-Code
String path="c:\excel.xls";//Excel-Datei-URL
InputStream is = new FileInputStream(path);//In FileInputStream schreiben
jxl.Workbook wb = Workbook.getWorkbook(is); //Arbeitsmappe abrufen
jxl.Sheet st = wb.getSheet(0);//Erstes Arbeitsblatt in der Arbeitsmappe abrufen
Cell cell=st.getCell(0,0);//Holen Sie sich die erste Zelle des Arbeitsblatts, nämlich A1
String content=cell.getContents();//getContents() konvertiert die Zeichen in Cell in Strings
wb.close();//Arbeitsmappe schließen
is.close();//Schließe den Eingabestream
String path="c:\excel.xls";//Excel-Datei-URL
InputStream is = new FileInputStream(path);//In FileInputStream schreiben
jxl.Workbook wb = Workbook.getWorkbook(is); //Die Arbeitsmappe abrufen
jxl.Sheet st = wb.getSheet(0);//Erstes Arbeitsblatt in der Arbeitsmappe abrufen
Cell cell=st.getCell(0,0);//Holen Sie sich die erste Zelle des Arbeitsblatts, nämlich A1
String content=cell.getContents();//getContents() konvertiert die Zeichen in Cell in Strings
wb.close();//Arbeitsmappe schließen
is.close();//Schließen Sie den Eingabestream. Wir können jede Zelle über die getCell(x,y)-Methode von Sheet abrufen, und x, y entsprechen den Koordinaten in Excel.
Beispielsweise entspricht A1 (0,0), A2 entspricht (0,1) und D3 entspricht (3,2). Die Koordinaten in Excel beginnen bei A,1, aber in jxl beginnen sie alle bei 0.
Sie können die Anzahl der Zeilen und Spalten auch über die Methoden getRows() und getColumns() von Sheet ermitteln und diese zur Schleifensteuerung verwenden, um den gesamten Inhalt eines Blatts auszugeben.
Schreiben:
Um Inhalte in Excel zu schreiben, verwenden Sie hauptsächlich die Klassen im Paket jxl.write.
Die Idee ist diese:
OutputStream<-WritableWorkbook<-WritableSheet<-Label
Die Bezeichnung stellt hier den Speicherort und den Inhalt der in das Blatt geschriebenen Zelle dar.
Java-Code
OutputStream os=new FileOutputStream("c:\test.xls");//Excel-Datei-URL ausgeben
WritableWorkbook wwb = Workbook.createWorkbook(os);//Eine beschreibbare Arbeitsmappe erstellen
WritableSheet ws = wwb.createSheet("sheet1", 0);//Ein beschreibbares Arbeitsblatt erstellen
Label labelCF=new Label(0, 0, "hello");//Schreibort und Inhalt erstellen
ws.addCell(labelCF);//Label in Blatt schreiben
Der Konstruktor von Label Label(int x, int y, String aString) xy bedeutet beim Lesen xy und aString ist der geschriebene Inhalt.
WritableFont wf = new WritableFont(WritableFont.TIMES, 12, WritableFont.BOLD, false);//Schreibschriftart festlegen
WritableCellFormat wcfF = new WritableCellFormat(wf);//Set CellFormat
Label labelCF=new Label(0, 0, "hello");//Schreibort, Inhalt und Format erstellen
Ein weiterer Konstruktor von Label, Label(int c, int r, String cont, CellFormat st), kann den geschriebenen Inhalt formatieren, die Schriftart und andere Attribute festlegen.
Sie können jetzt schreiben
wwb.write();
Nach dem Schreiben schließen
wwb.close();
Schließen Sie außerdem den Ausgabestream
os.close;
OK, solange Sie Lesen und Schreiben kombinieren, können Sie Daten in N Excel lesen und in die gewünschte neue Excel-Tabelle schreiben, was sehr praktisch ist.
Das Folgende ist ein Beispiel für ein Programm:
Java-Code
sql = "select * from tablename";
rs = stmt.executeQuery(sql);
//Eine neue Excel-Datei erstellen
String filePath=request.getRealPath("aaa.xls");
Datei myFilePath=new File(filePath);
if(!myFilePath.exists())
myFilePath.createNewFile();
FileWriter resultFile=new FileWriter(myFilePath);
PrintWriter myFile=new PrintWriter(resultFile);
resultFile.close();
//Verwenden Sie JXL, um der neu erstellten Datei Inhalte hinzuzufügen
OutputStream outf = new FileOutputStream(filePath);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(outf);
jxl.write.WritableSheet ws = wwb.createSheet("sheettest", 0);
int i=0;
int j=0;
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,0,rs.getMetaData().getColumnName(k+1)));
}
while(rs.next()){
out.println(rs.getMetaData().getColumnCount());
for (int k = 0; k < rs.getMetaData().getColumnCount(); k++) {
ws.addCell(new Label(k,j+i+1,rs.getString(k+1)));
}
i++;
}
wwb.write();
wwb.close();
}catch(Exception e){e.printStackTrace();}
Endlich{
rs.close();
conn.close();
}
Response.sendRedirect("aaa.xls");
Dieser Artikel stammt aus dem CSDN-Blog. Bitte geben Sie beim Nachdruck die Quelle an: http://blog.csdn.net/yangf1984/archive/2009/12/28/5088933.aspx