从Excel第一列获取错误的数值

时间:2014-04-22 14:46:25

标签: java excel apache-poi

我用Apache-poi 3.8阅读Excel电子表格(.xlsx)。当我尝试从0列索引处的单元格获取数值时,我得到错误的数字值。

例如我的表看起来像这样

+-----------+---------+---------+
| Header1   | Header2 | Header3 |
+-----------+---------+---------+
| 123456789 | AA      | BB      |
|     99999 | CC      | DD      |
+-----------+---------+---------+

我开始阅读行索引1和单元格索引0.它应返回123456789但它返回错误的值13。即使它是数值,下一列也是正确的。如果第一个单元格包含字符串,则它也返回正确的值。第2行单元格0读取为14,下一列正确。

我从第一列获得的数字与表单中的行数有某种关系,如果我有6行,则它开始返回16,17,18,19,20。它不应该与其他框架相关,但我使用myfaces tomahawkjsf 1.2来上传我的Excel文件。

public String getCellStr(final int x, final int y) {
    String cellValue = "";
    try {
        Row row = sheet.getRow(x);
        Cell cell = row.getCell(y);
        if (row == null || (row != null && cell == null)) {
            cellValue = "";
        } else {
            switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                cellValue = cell.toString();
                break;
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    cellValue = DateUtils.date2String(cell.getDateCellValue());
                } else {
                    Double value = cell.getNumericCellValue();
                    Long longValue = value.longValue();
                    cellValue = longValue.toString();
                }
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                cellValue = new String(new Boolean(
                                  cell.getBooleanCellValue()).toString());
                break;
            case Cell.CELL_TYPE_BLANK:
                cellValue = "";
                break;
            }
        }
    } catch (NullPointerException e) {
        return cellValue;
    }
    return cellValue;
}

1 个答案:

答案 0 :(得分:1)

最后我发现了自己的错误。此代码负责奇怪的行为。显然我不能将细胞投射到其他类型并将其抛弃而不会破坏其价值。

int cellType = cell.getCellType();
cell.setCellType(Cell.CELL_TYPE_STRING);
String val = cell.getStringCellValue();
cell.setCellType(cellType);