首页 > 解决方案 > 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)

标签: javaexceljakarta-eeapache-poipie-chart

解决方案


错误很明显。请参阅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:A6val数据源B2:B6


推荐阅读