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:

  1. 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)

    AntwortenLöschen
  2. Liegt die Exceldatei auf
    D:\ ?

    sonst im Quellcode den Pfad
    ändern?

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

    AntwortenLöschen
  3. 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

    AntwortenLöschen
  4. Anonym10:24 AM

    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?

    AntwortenLöschen
  5. 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

    AntwortenLöschen
  6. Jackii1:13 PM

    Ein paar Kommentare im Quellcode wäre praktisch ;)

    AntwortenLöschen