从xlsx文件获取数据时无法从文本单元格获取数值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从xlsx文件获取数据时无法从文本单元格获取数值相关的知识,希望对你有一定的参考价值。

.xlsx文件中读取数据时遇到错误。由于此错误,我无法读取数据。面对错误消息“无法从文本单元格获取数值”。

这里是代码:

switch (cell.getCellType()) {
    case HSSFCell.CELL_TYPE_FORMULA:
        rowArray[count] = isCellDateFormatted(cell) ? dateFormat.format(cell.getDateCellValue()) : Double.toString(cell.getNumericCellValue());
        break;
    case Cell.CELL_TYPE_BOOLEAN:
        rowArray[count] = Boolean.toString(cell.getBooleanCellValue());
        break;
    case Cell.CELL_TYPE_NUMERIC:
        rowArray[count] = isCellDateFormatted(cell) ? dateFormat.format(cell.getDateCellValue()) : Double.toString(cell.getNumericCellValue());
        break;
    case Cell.CELL_TYPE_STRING:
        rowArray[count] = cell.getStringCellValue().replace(separatorStr, escapeStr + separatorStr).replace("
", " ");
        break;
    default:
        rowArray[count] = "";
}

这里是例外:

java.lang.IllegalStateException: Cannot get a numeric value from a text cell
 at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:994)
 at org.apache.poi.xssf.usermodel.XSSFCell.getNumericCellValue(XSSFCell.java:305)
 at org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(DateUtil.java:494)
 at cvx.qwer.adfffg.excel.XlsxToCsv.convertToCsv(XlsxToCsv.java:76)
 at cvx.qwer.adfffg.excel.XlsxToCsv.main(XlsxToCsv.java:136)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

答案

截至您显示的代码,rowArray似乎是一个String数组。因此,需要获取所有单元格值作为String表示形式。最好的方法是将DataFormatterFormulaEvaluator结合使用:

...
Workbook workbook ...
...
FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
DataFormatter formatter = new DataFormatter();
...
Cell cell ...
...
rowArray[count] = formatter.formatCellValue(cell, evaluator);
...

不需要使用整个切换单元类型。DataFormatter.formatCellValue

返回单元格的格式化值作为字符串,而不考虑单元格类型。

以上是关于从xlsx文件获取数据时无法从文本单元格获取数值的主要内容,如果未能解决你的问题,请参考以下文章

从 DataGridView 选定的单元格中获取文本

从数据框中获取特定单元格

如何从表格视图中的选定单元格中获取文本?

如何从pdf文件的表格中获取文本?

单击表格单元格时无法获取表格标题文本

从 Swift (3.1) 表格视图中动态创建的单元格获取有序的文本字段数据