apache poi-pie chart-java.lang.illegalstateexception:类别和值必须具有相同的点计数

svdrlsy4  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(455)

我得到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);


illegalstateexception:类别和值必须具有相同的点计数。在org.apache.poi.xddf.usermodel.chart.xddfchartdata$series.replacedata(xddfchartdata)上。java:170)在org.apache.poi.xddf.usermodel.chart.xddfchartdata$series。java:161)在org.apache.poi.xddf.usermodel.chart.xddfpiechartdata$series。java:107)在org.apache.poi.xddf.usermodel.chart.xddfpiechartdata.addseries(xddfpiechartdata)。java:97)

ndasle7k

ndasle7k1#

错误很明显。有关构造函数参数的含义,请参见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 .

相关问题