我用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 tomahawk
和jsf 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;
}
答案 0 :(得分:1)
最后我发现了自己的错误。此代码负责奇怪的行为。显然我不能将细胞投射到其他类型并将其抛弃而不会破坏其价值。
int cellType = cell.getCellType();
cell.setCellType(Cell.CELL_TYPE_STRING);
String val = cell.getStringCellValue();
cell.setCellType(cellType);