Apache POI将列值插入ArrayList <string []>

时间:2016-06-22 15:51:53

标签: java excel arraylist apache-poi

我需要帮助将列值插入ArrayList<String[]>结构中。如果我有这张Excel表格:

enter image description here

我使用两种数据结构。列名称为HashMap,值为ArrayList<String[]>。我能够很好地获得列名,但无法弄清楚如何获取值。

这是我的代码:

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++;
}

我不确定如何将值添加到此行的ArrayList

values.add(j, //cellVal_at_valueIndex);

如果我只是放cellVal,那么它就不会正确地与HashMap中的列映射关联。基本上,我希望它看起来像这样:

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

从这里开始,我可以做values.get(columnNames.get("id"))[valueIndex];

之类的事情

我这样做是因为每个都可以有任意数量的列和值。使用get方法从特定列获取值也更容易。

如何在String数组中添加值?我觉得我错过了一些简单的事情。提前谢谢!

1 个答案:

答案 0 :(得分:0)

尝试类似:

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());
}  

有关详细信息,请查看Getting the cell contents链接。