# Tutorial zum Excel Tabelle in JTable einlesen?



## Samy´San (21. Jun 2008)

Hallo an alle.

Ich habe eine JTable in meinem Programm, ich will nun gern das der Inhalt einer Tabelle die mit Excel gemacht worden ist in diese Jtable übertragen wird. Ist das Möglich? Wenn ja wo kann ich nachlsen wie das geht? Habe hier paar Bücher doch dort stehts leider nichts. Oder könnt Ihr mir das evt erklären?

Danke an alle.
Samy


----------



## daNny (21. Jun 2008)

Also mit JExcel ist das ganze ziemlich einfach. Hier mal eine Klasse, die ich mal geschrieben habe:

```
/**
 * Reader zum Auslesen von Exceldateien
 *
 * @author Danny
 * @version 0.1
 */
public class ExcelReader {
    
    /** Die Arbeitsmappe der Exceldatei */
    private Workbook workbook;
    
    /** Einstellungen für die Arbeitsmappe */
    private WorkbookSettings settings;
    
    /** Der aktuell verwendete Sheet */
    private Sheet sheet;
    
    /** Erzeugt einen neuen ExcelReader und verwendet Standardeinstellungen */
    public ExcelReader() {
        this.settings = new WorkbookSettings();
        this.settings.setLocale(new Locale("de", "DE"));
        this.settings.setEncoding("ISO-8859-1");
        //this.settings.setEncoding("UTF-8");
    }
    
    /**
     * Lädt eine neue Datei und selektiert den ersten Sheet
     * @param file die zu öffnende Datei
     * @throws java.io.IOException
     * @throws jxl.read.biff.BiffException
     */
    public void loadFile(File file) throws IOException, BiffException {
        this.workbook = Workbook.getWorkbook(file);   
        this.sheet = this.workbook.getSheet(0);
    }
    
    /**
     * Wählt den Sheet anhand seiner ID aus
     * @param sheetId die ID des Sheets
     */
    public void setSheet(int sheetId) {
        this.sheet = this.workbook.getSheet(sheetId);
    }
    
    /**
     * Wählt den Sheet anhand seines Namens aus
     * @param sheetName der Name des Sheets
     */
    public void setSheet(String sheetName) {
        this.sheet = this.workbook.getSheet(sheetName);
    }
    
    /**
     * Gibt den aktuell verwendeten Zeichensatz zurück
     * @return Zeichensatz
     */
    public String getEncoding() {
        return this.settings.getEncoding();
    }
    
    /**
     * Legt den zu verwendeten Zeichensatz fest
     * @param encoding Zeichensatz
     */
    public void setEncoding(String encoding) {
        this.settings.setEncoding(encoding);
    }
        
    /**
     * Gibt die Namen aller verfügbaren Sheets zurück
     * @return die verfügbaren Sheets
     */
    public String[] getSheetNames() {
        return this.workbook.getSheetNames();
    }
    
    /**
     * Gibt die Anzahl der Zeilen des aktuellen Sheets zurück
     * @return Anzahl der Zeilen
     */
    public int getRowCount() {
        return this.sheet.getRows();
    }
    
    /**
     * Gibt die Anzahl der Spalten des aktuellen Sheets zurück
     * @return Anzahl der Spalten
     */
    public int getColumnCount() {
        return this.sheet.getColumns();
    }
    
    /**
     * Gibt den Inhalt des Sheets als zweidimensionales String-Array zurück
     * @return Inhalt des Sheets
     */
    public String[][] getDataArray() {
        
        int rows = this.sheet.getRows();
        int cols = this.sheet.getColumns();    
        
        String[][] data = new String[rows][];
        
        // Alle Zeilen des Sheets durchlaufen
        for (int i = 0; i < rows; i++) {
            
            Cell[] row = this.sheet.getRow(i); // Die Zellen der aktuellen Zeile
            String[] newRow = new String[cols]; // Zeile als String-Array
            
            // Die Spalten der aktuellen Zeile durchlaufen
            for (int j = 0; j < cols && j < row.length; j++) {
                newRow[j] = row[j].getContents();
            }
            
            data[i] = newRow; // String-Array in das Daten-Array einfügen
            
        }
        
        return data;
        
    }

}
```

Jetzt kannst du eine Instanz des ExcelReaders erstellen und die Datei laden.
Mit *setSheet()* kannst du entweder mit der ID oder den Namen den Sheet auswählen. Wenn du dann *getDataArray()* aufrufst, bekommst du ein zweidimensionales String-Array mit den vorhandenen Zeilen und SPalten zurück.

Wenn du dich jetzt ein bissle mit dem TableModel auskennst, sollte das ganze recht einfach sein.
Vorraussetzung für die Klasse ist das Vorhandensein der JExcelAPI!


----------



## MathiasBauer (22. Jun 2008)

Das scheint ja so ähnlich zu sein wie POI von Apache? Ist das besser? Welche Vor- bzw. Nachteile gibt es?


----------



## Guest (16. Sep 2008)

Auf dieser Seite findest du einen kleinen Vergleich zwischen beiden API'S

www.ordix.de/ORDIXNews/1_2008/Java_J2EE_JEE/jexcelapi_jakarta.html


----------



## MathiasBauer (16. Sep 2008)

Sehr schöner, umfangreicher Vergleich. Danke!


----------

