2016-06-22 10 views
0

Ich brauche Hilfe Einfügen von Spaltenwerten in eine ArrayList<String[]> Struktur. Wenn ich diese Excel-Blatt haben:Apache POI Spaltenwerte in ArrayList einfügen <String[]>

enter image description here

ich zwei Datenstrukturen. Eine HashMap für die Spaltennamen und die ArrayList<String[]> für die Werte. Ich bin in der Lage, die Spaltennamen in Ordnung zu bekommen, kann aber nicht herausfinden, wie man die Werte bekommt.

Hier ist mein Code:

Map<String, Integer> columnNames = new HashMap<String, Integer>(); 
List<String[]> values = new ArrayList<String[]>(); 
DataFormatter dataFormat = new DataFormatter(); 
FormulaEvaluator eval = workbook.getCreationHelper().createFormulaEvaluator(); 

Row row; 
int valueIndex = 0; 

for(int i = 0; i < sheet.getLastRowNum(); i++) { 
    row = (Row) sheet.getRow(i); 

    Iterator<Cell> cells = row.cellIterator(); 

    // Read each cell in the row 
    for(int j = 0; cells.hasNext(); j++) { 
     Cell cell = cells.next(); 

     // Column Headers 
     if(cell.getRowIndex() == 0) { 
      eval.evaluate(cell); 
      String cellVal = dataFormat.formatCellValue(cell, eval); 
      columnNames.put(cellVal, j); 

     // Column values 
     } else { 
      eval.evaluate(cell); 
      String cellVal = dataFormat.formatCellValue(cell, eval); 

      // What do I write here? 
      values.add(j, //cellVal_at_valueIndex); 
     } 
    } 

    // Go to next index for values (down 1 row) 
    valueIndex++; 
} 

Ich bin nicht sicher, wie der Wert der ArrayList auf dieser Zeile hinzufügen:

values.add(j, //cellVal_at_valueIndex); 

Wenn ich gerade cellVal dann wird es nicht korrelieren zu den Spaltenzuordnungen in der HashMap korrekt. Bascially, ich will es so aussehen:

HashMap:      ArrayList: 
------------------   -------------------- 
Key  | Value   String | Index   
------------------   -------------------- 
id   0    1    0 
number  1    2    1 
time   2    ...   ... 

Von hier aus kann ich etwas tun, wie values.get(columnNames.get("id"))[valueIndex];

Ich bin es so zu tun, weil es eine Anzahl von Spalten und Werten für jeden sein kann. Es ist auch einfacher, mit einer get-Methode einen Wert aus einer bestimmten Spalte zu erhalten.

Wie kann ich die Werte im Array String hinzufügen? Ich fühle mich, als würde ich etwas Einfaches vermissen. Danke im Voraus!

Antwort

0

Probieren Sie etwas wie:

if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) 
{ 
    System.out.print(cell.getNumericCellValue()); 
    values.add(cell.getNumericCellValue()); 
} 
else if (cell.getCellType() == Cell.CELL_TYPE_STRING) 
{ 
    System.out.print(cell.getRichStringCellValue()); 
    values.add(cell.getRichStringCellValue()); 
} 
else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) 
{ 
    System.out.print(cell.getBooleanCellValue()); 
    values.add(cell.getBooleanCellValue()); 
} 

Weitere Infos unter Getting the cell contents Link anschauen.