有没有特殊原因POI创建一个数字单元格,实际上它实际上是空的?会发生什么事情,当我到达那个单元格时,我显然得到一个运行时错误,因为我无法得到字符串值(毕竟它是一个数字单元格),我也无法得到数值(不能从空字符串中获取一个数字)所以我的两个问题是:
更新I: 在读取/解析我的excel文件后,POI为此特定单元格生成以下XML:
<x:c r="AA2" t="n">
<x:v/>
</x:c>
我的方法是这样的:
final FileInputStream inputStream = new FileInputStream(new File("PATH/TO/FILE.xml"));
final XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
final XSSFSheet sheet = workbook.getSheet("SHEET_NAME");
final int columnCount = sheet.getRow(0).getLastCellNum();
for (int rowNumber = 0; rowNumber <= sheet.getLastRowNum(); rowNumber++)
{
final XSSFRow row = sheet.getRow(rowNumber);
for (int column = 0; column < columnCount; column++)
{
// By now my cell would throw an exception if I attempt cell.getStringCellValue() or cell.getNumericCellValue() as cell.getCellType() returns "0" / NUMERIC
final XSSFCell cell = row.getCell(column);
...
}
}
我正在考虑添加一个额外的验证,以通过使用getRawValue()方法确定该单元格是否为空,但不确定是否有更好的方法来处理它,因为它显然被错误地解析了。
更新II 我已经能够通过添加它作为单元测试的一部分来重现这种情况(我仍然不明白为什么POI会陷入这种情况):
final XLSXSheetConverterImpl xlsxSheetConverter = new XLSXSheetConverterImpl();
xlsxSheetConverter.setSheetName(SHEET_NAME);
xlsxSheetConverter.setFilePrefix(FILE_PREFIX);
XSSFWorkbook workbook = new XSSFWorkbook();
final XSSFSheet sheet = workbook.createSheet(SHEET_NAME);
final XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
final CTCellImpl ctCell = (CTCellImpl) cell.getCTCell();
ctCell.setT(STCellType.N);
ctCell.setV("");
提前致谢!
答案 0 :(得分:1)