Dienstag, September 20, 2011

Excel Tabelle in Java einlesen

Beim Spielen mit Java bin ich über ein Tutorial gestolpert, das erklärt, wie man Excel Dateien in Java einlesen kann.

Da ein Beispiel mehr sagt als lange Erklärungen:
Hier gibts die Excel-Datei test.xls und hier das zugehörige Java-File Excelbeispiel.java.

Wichtig ist noch, dass man in der Excel-Datei alle Zellen, die man später haben möchte
markiert und benennt. Unter open-office-calc geht das mittels Einfügen->Namen->Festlegen.
Die Excel-Datei direkt auf d:\ legen.


import java.sql.*;

public class ExcelBeispiel {

/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dbpath = "d:/test.xls";

Connection con = DriverManager
.getConnection("jdbc:odbc:DRIVER={Microsoft Excel Driver (*.xls)};DBQ="
+ dbpath);

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM testbereich");

ResultSetMetaData rsmd = rs.getMetaData();
int clmCnt = rsmd.getColumnCount();

while (rs.next()) {
for (int i = 1; i <= clmCnt; i++) {
System.out.print(rs.getString(i));
System.out.print(" ");
}
System.out.println();
}

con.close();
}

}



viaThomas Darimont

6 Kommentare:

sonic hat gesagt…

Hat bei mir nicht funktioniert... bekomme immer diese Fehlermeldung
Exception in thread "main" java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ExcelBeispiel.main(ExcelBeispiel.java:13)

Ratilius hat gesagt…

Liegt die Exceldatei auf
D:\ ?

sonst im Quellcode den Pfad
ändern?

String dbpath = "d:/test.xls";

Lars hat gesagt…

Ich würde gerne einen String einlesen (Artikelnummer, die aus Zahlen und Buchstaben besteht). Das Programm gibt an der stelle aber nur "Null" aus anstatt des Strings. Muss ich dafür noch etwas ändern?

Gruß
Lars

Anonym hat gesagt…

Bei mir kommt es auch zur oben genannten Fehlermeldgung:
Exception in thread "main" java.sql.SQLException: [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at ExcelBeispiel.main(ExcelBeispiel.java:20)

Der Pfad im Quellcode ist bei mir korrekt. Muss ich jetzt noch einen Treiber installieren?

Ratilius hat gesagt…

bei mir hat eclipse noch ein paar packages automatisch funktioniert:
vorsicht pfad der datei ist jetzt h:\


import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;


public class ExcelBeispiel {

/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dbpath = "h:/test.xls";

Connection con = DriverManager
.getConnection("jdbc:odbc:DRIVER={Microsoft Excel Driver (*.xls)};DBQ="
+ dbpath);

java.sql.Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM testbereich");

ResultSetMetaData rsmd = rs.getMetaData();
int clmCnt = rsmd.getColumnCount();

while (rs.next()) {
for (int i = 1; i <= clmCnt; i++) {
System.out.print(rs.getString(i));
System.out.print(" ");
}
System.out.println();
}

con.close();
}

}


---------------------
Ende code


Ausgabe auf der konsole:
1.0 34.0 3.0
2.0 34.0 123.0
3.0 123.0 21.0
4.0 14.0 123.0
5.0 324.0 3.0
6.0 23.0 2.0
7.0 423.0 32.0
8.0 4.0 3.0
9.0 4.0 23.0
10.0 434.0 2.0
11.0 34.0 14.0

Jackii hat gesagt…

Ein paar Kommentare im Quellcode wäre praktisch ;)