java - Apache POI - 饼图 - java.lang.IllegalStateException:类别和值必须具有相同的点数
问题描述
我收到 java.lang.IllegalStateException:类别和值必须具有相同的点数。我在下面的代码中缺少什么?谢谢。
XDDFDataSource<String> cat = XDDFDataSourcesFactory.fromStringCellRange(sheet,
new CellRangeAddress(0, 0, 0, 1));
XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
new CellRangeAddress(1, 6, 0, 1));
XDDFChartData chartData = chart.createData(ChartTypes.PIE, null,
null);
chartData.setVaryColors(true);
chartData.addSeries(cat, val);
chart.plot(chartData);
java.lang.IllegalStateException:类别和值必须具有相同的点数。在 org.apache.poi.xddf.usermodel.chart.XDDFChartData$Series.replaceData(XDDFChartData.java:170) 在 org.apache.poi.xddf.usermodel.chart.XDDFChartData$Series.(XDDFChartData.java:161) 在org.apache.poi.xddf.usermodel.chart.XDDFPieChartData$Series.(XDDFPieChartData.java:107) 在 org.apache.poi.xddf.usermodel.chart.XDDFieChartData.addSeries(XDDFPieChartData.java:97)
解决方案
错误很明显。请参阅CellRangeAddress了解构造函数参数的含义。
因此,您的cat
数据源是从第 0 行到第 0 行,从第 0 列到第 1 列。也就是说A1:B1
。但是您的val
数据源是从第 1 行到第 6 行,从第 0 列到第 1 列。也就是说A2:B7
。所以cat
数据源包含 2 个单元格,但val
数据源包含 12 个单元格。
根据您的工作Excel
表屏幕截图,它应该是:
XDDFDataSource<String> cat = XDDFDataSourcesFactory.fromStringCellRange(sheet,
new CellRangeAddress(1, 5, 0, 0));
XDDFNumericalDataSource<Double> val = XDDFDataSourcesFactory.fromNumericCellRange(sheet,
new CellRangeAddress(1, 5, 1, 1));
即cat
数据源A2:A6
和val
数据源B2:B6
。
推荐阅读
- javascript - 浏览器的 sdk 是否支持亚马逊的 AWS Textract(在 javascript 中)?
- python - 使用 QSplitter 和 QMainWindow 应用 QMdiarea
- javascript - 只有当表格悬停时才会出现滚动条
- java - 未使用 Spring-Cloud-Stream 创建 RabbitMQ Exchange
- mongodb - mongodump 无法将集合“XYZ”的数据写入磁盘时出错
- sass - 使用 SASS 检查颜色是否包含 Alpha 通道
- awk - 如何用 sed 替换 yml 文件中的文本,确保保留缩进
- excel-formula - 公式中不相邻的单元格导致参数过多
- node.js - 使用 ipcMain 和 ipcRenderer 解决 Electron 应用程序中的事件混乱的设计模式
- python - 如何使用 python 优化大文件的清理和合并时间?