Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Apache POI 4-使用多个空单元格创建折线图_Java_Apache Poi - Fatal编程技术网

Java Apache POI 4-使用多个空单元格创建折线图

Java Apache POI 4-使用多个空单元格创建折线图,java,apache-poi,Java,Apache Poi,我确实喜欢根据我的数据源创建一个折线图,但不幸的是,当折线图y系列跨越多个单元格时,它在plot chat时遇到NullPointException 我发现该列为空时出错,并强制设置为“0”以使其正常工作 无论如何,我可以在没有硬编码“0”的空单元格上绘制图表 下面是我硬编码默认值的方式 for (int i = 0; headers.size() > i; i++) { row.createCell(i, CellType.NUMERIC); } 以下是线条图代码: int r

我确实喜欢根据我的数据源创建一个折线图,但不幸的是,当折线图y系列跨越多个单元格时,它在plot chat时遇到NullPointException

我发现该列为空时出错,并强制设置为“0”以使其正常工作

无论如何,我可以在没有硬编码“0”的空单元格上绘制图表

下面是我硬编码默认值的方式

for (int i = 0; headers.size() > i; i++) {
    row.createCell(i, CellType.NUMERIC);
}
以下是线条图代码:

int rows = numberOfRows - 1;
int cols = headers.size();

XSSFDrawing drawing = sheet.createDrawingPatriarch();
XSSFClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 5, 10, 15);
XSSFChart chart = drawing.createChart(anchor);
chart.displayBlanksAs(DisplayBlanks.GAP);

XDDFChartLegend legend = chart.getOrAddLegend();
legend.setPosition(LegendPosition.TOP_RIGHT);

// Use a category axis for the bottom axis.
XDDFCategoryAxis bottomAxis = chart.createCategoryAxis(AxisPosition.BOTTOM);
bottomAxis.setOrientation(AxisOrientation.MAX_MIN);
bottomAxis.setTitle("Date");

XDDFValueAxis rightAxis = chart.createValueAxis(AxisPosition.RIGHT);
rightAxis.setTitle("Rates");
rightAxis.setCrosses(AxisCrosses.AUTO_ZERO);

XDDFChartLegend chartLegend = chart.getOrAddLegend();
chartLegend.setPosition(LegendPosition.TOP_RIGHT);
chartLegend.setOverlay(false);

XDDFLineChartData lineChartData = (XDDFLineChartData) chart.createData(ChartTypes.LINE, bottomAxis, rightAxis);
lineChartData.setVaryColors(false);

XDDFDataSource<String> xs = XDDFDataSourcesFactory.fromStringCellRange(sheet, new CellRangeAddress(1, rows, 1, 1));

for (int col = 2; cols > col; col++) {
    XDDFNumericalDataSource<Double> ys = XDDFDataSourcesFactory.fromNumericCellRange(sheet, new CellRangeAddress(1, rows, col, col));
    XDDFLineChartData.Series series = (XDDFLineChartData.Series) lineChartData.addSeries(xs, ys);
    series.setTitle(headers.get(col), null);
    series.setSmooth(false);
    series.setMarkerStyle(MarkerStyle.NONE);
}

chart.plot(lineChartData);
int rows=numberOfRows-1;
int cols=headers.size();
XSSFDrawing=sheet.createdrawingparhical();
XSSFClientAnchor-anchor=drawing.createAnchor(0,0,0,0,5,10,15);
XSSFChart chart=drawing.createChart(锚定);
chart.displaybanksas(displaybanks.GAP);
XDDFChartLegend legend=chart.getOradLegend();
图例.设置位置(LegendPosition.右上角);
//使用类别轴作为底部轴。
XDDFCategoryAxis bottomAxis=chart.createCategoryAxis(AxisPosition.BOTTOM);
bottomAxis.setOrientation(AxisOrientation.MAX_-MIN);
下轴。设定标题(“日期”);
XDDFValueAxis rightAxis=chart.createValueAxis(AxisPosition.RIGHT);
rightAxis.setTitle(“费率”);
rightAxis.SetCrosss(AxisCrosss.AUTO_ZERO);
XDDFChartLegend=chart.getOradLegend();
图表图例.设置位置(LegendPosition.右上角);
chartLegend.setOverlay(假);
XDDFLineChartData lineChartData=(XDDFLineChartData)chart.createData(ChartTypes.LINE、bottomAxis、rightAxis);
lineChartData.SetVaryColor(假);
XDDFDataSource xs=XDDFDataSourcesFactory.fromStringCellRange(表,新CellRangeAddress(1,行,1,1));
for(int col=2;cols>col;col++){
XDDFNumericalDataSource ys=XDDFDataSourcesFactory.fromNumericCellRange(工作表,新的CellRangeAddress(1,行,列,列));
XDDFLineChartData.Series=(XDDFLineChartData.Series)lineChartData.addSeries(xs,ys);
series.setTitle(headers.get(col),null);
系列。设置平滑(假);
series.setMarkerStyle(MarkerStyle.NONE);
}
图表.绘图(线形图表数据);

<或代码>可以用硬编码的<代码> >“n/v”<代码>代替硬编码<代码> 0代码>,它告诉图表不要考虑这些单元。它显示为excel,但无法绘制图表…:(太糟糕了,值得一试……我可以确认空图表数据单元格是一个问题,直到
ApachePOI4.1.0
NPE在org.apache.poi.xddf.usermodel.chart.XDDFChart.fillSheet
)。但它已在
apache poi 4.1.1
@AxelRichter中解决。您的评论将我从麻烦的设置中解救出来。将默认值设置为强制绘图图表!非常感谢!!!