# excel einlesen und in db schreiben



## hamid (26. Jan 2011)

hallo

ich will daten aus einer excel datei auslesen und in meine db rein schreiben. wie mache ich das am besten und einfachsten??? ich hab mir das poi framework von apache angeschaut werde aber nicht schlau daraus...allein die installation ist schon schwierig.

danke für eure hilfe


----------



## Empire Phoenix (26. Jan 2011)

Gibt JDBC treiber für exel im internet, und dann halt einfach select auser exel und insert inne db


----------



## maretz (28. Jan 2011)

Moin,

mit Apache Poi kannst du recht einfach Excel-Files einlesen:


```
import org.apache.poi.hssf.dev.*;
import org.apache.poi.hssf.record.Record;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.io.*;

@SuppressWarnings({ "unused", "restriction" })
public class ReadExcel {
    // Alle Arrays als String -> Der Aufrufer muss die dann zurück konvertieren!
    public ArrayList<String> ColA = new ArrayList<String>();
    public ArrayList<String> ColB = new ArrayList<String>();

public void ReadExcelStart(String filename) {
    String sheetname="Tabelle1"; // Name der Tabelle im Excel-Arbeitsblatt
        try {
            // Die Datei öffnen
            InputStream input = new FileInputStream(filename);
            // Die Excel-Datei importieren
            HSSFWorkbook wb = new HSSFWorkbook(input);
            // Die Tabelle öffnen
            HSSFSheet sheet = wb.getSheet(sheetname);
            // Den Zeiger auf die erste Zeile setzen!
            HSSFRow row = sheet.getRow(0);
            // Die Array-Listen blank machen - hier sollen ja gleich die Daten rein
            ColA.clear();
            ColB.clear();
           
            // Das Zahlenformat festlegen
            NumberFormat formatter = new DecimalFormat("#0");
            for (int i=0;i<=sheet.getLastRowNum();i++) {
                row = sheet.getRow(i);
                try {                    
                    // Test der Zelle: 0: Zahlenwert, 1= Textwert, danach den Wert an die ArrayListe anhängen
                    if (row.getCell(0).getCellType()==0)
                        ColA.add(String.valueOf(row.getCell(0).getNumericCellValue()));
                    else ColA.add(row.getCell(0).getStringCellValue());
                } catch (NullPointerException e) {
                    // Nix - es stand lediglich im Feld nichts drin!
                    ColA.add("");
                }
                
// Dasselbe für Spalte B (und falls man möchte für weitere - dann das getCell([Zellennummer]) jeweils hochzählen
                try {
                    if (row.getCell(1).getCellType()==0)
                        ColB.add(String.valueOf(row.getCell(1).getNumericCellValue()));
                    else ColB.add(row.getCell(1).getStringCellValue());
                } catch (NullPointerException e) {
                    // Nix - es stand lediglich im Feld nichts drin!
                    ColB.add("");
                }
// ...
            } // Hier ist das ende der for-Schleife -> d.h. hier ist jetzt das ende der Tabelle erreicht

// Bei Bedarf kann man ja nochmal eine Testausgabe machen
//            for (int j=1;j<ColA.size();j++) {
//                int X = Integer.parseInt(ColA.get(j).replace(".0", ""));
//                System.out.println(X+" | "+ColB.get(j)); 
//            }
        } catch (Exception e) { e.printStackTrace(); }
    }

}
```

Was du dann damit machst ist ja wieder eine andere Sache... Solang du weisst welches Format deine Tabelle hat kannst du das ja dann in eine Datenbank reinschieben, auf dem Bildschirm ausgeben oder auch dem GC zum Fraß vorwerfen 

Schönen Gruß

Mike


----------

