当使用 POI 4.1 库以编程方式在 .xslx 文件中创建数据透视表时,问题就出现了。
POI 从 3.X 升级到 4.1 的一部分是删除设置单元类型。因此在 4.X 中调用和设置单元格类型是自动处理的。就我而言,我曾认为我的问题是由这种变化引起的。下面的重构示例
currentRow.createCell(i, Cell.CELL_TYPE_NUMERIC).setCellValue(Double.parseDouble(str[i]));
至
currentRow.createCell(i).setCellValue(Double.parseDouble(str[i]));
创建数据透视表时,使用函数 .createPivotTable() 我收到以下错误。
Exception in thread "main" java.lang.IllegalStateException: Cannot get a STRING value from a NUMERIC cell
at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:1003)
at org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:389)
at org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:341)
at org.apache.poi.xssf.usermodel.XSSFPivotCacheDefinition.createCacheFields(XSSFPivotCacheDefinition.java:182)
at org.apache.poi.xssf.usermodel.XSSFSheet.createPivotTable(XSSFSheet.java:4452)
at org.apache.poi.xssf.usermodel.XSSFSheet.createPivotTable(XSSFSheet.java:4421)
从代码行
XSSFPivotTable pivotTable =
pivot_sheet.createPivotTable(aref,pos,sheet);
我曾认为这与由于单元格创建的变化而为数据透视表格式化的数据有关。
问题最终是我的数据创建了一个原始数字单元格表,但没有任何标题。.createPivotTable() 将“第一个单元格”作为字符串调用,假设它是一个标题。这是函数的默认操作。
此默认操作应记录在函数中或编写更好的异常以阐明抛出的错误是来自数据单元格还是标题单元格。
TLDR。createPivotTable() 需要一个字符串标题来设置列名。