问题描述
我正在使用apache poi进行自动化创建excel图表的工作,对于第一次运行来说,它运行良好,而在第二次运行时,我会遇到异常。
在创建第一个运行图期间,在第二个运行期间,我遇到断言错误,我尝试调试,但无法获得确切的根本原因。
java.lang.AssertionError
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.values.XmlObjectBase.build_text(XmlObjectBase.java:882)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Xobj.ensureOccupancy(Xobj.java:1712)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Cur.moveNode(Cur.java:1892)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Cur.moveNode(Cur.java:1846)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Cur.createHelper(Cur.java:287)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Cur.createElement(Cur.java:231)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Cur.createElement(Cur.java:226)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Xobj.insertElement(Xobj.java:2116)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.xmlbeans.impl.store.Xobj.add_element_user(Xobj.java:2197)
06:46:46.260 [DEBUG] [TestEventLogger] at org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.impl.CTDrawingImpl.addNewTwoCellAnchor(UnkNown Source)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.poi.xssf.usermodel.XSSfdrawing.createTwoCellAnchor(XSSfdrawing.java:537)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.poi.xssf.usermodel.XSSfdrawing.createGraphicFrame(XSSfdrawing.java:405)
06:46:46.260 [DEBUG] [TestEventLogger] at org.apache.poi.xssf.usermodel.XSSfdrawing.createChart(XSSfdrawing.java:240)
06:46:46.260 [DEBUG] [TestEventLogger] at com.ford.sonarqube.api.support.ExcelChartCreator.createChart(ExcelChartCreator.java:176)
这是我的代码
public static void createChart(XSSFWorkbook workbook,XSSFSheet sheet) {
// create data sources
//ZipSecureFile.setMinInflateratio(0);
Row row = sheet.getRow(sheet.getLastRowNum());
CellType type = CellType.ERROR;
XDDFDataSource months = null;
if (row != null) {
Cell cell = row.getCell(0);
if (cell != null) {
type = cell.getCellType();
if (type == CellType.STRING) {
months = XDDFDataSourcesFactory.fromStringCellRange(sheet,new CellRangeAddress(1,sheet.getLastRowNum(),0));
} else if (type == CellType.NUMERIC) {
months = XDDFDataSourcesFactory.fromNumericCellRange(sheet,0));
} else if (type == CellType.FORMULA) {
type = cell.getCachedFormulaResultType();
if (type == CellType.STRING) {
months = XDDFDataSourcesFactory.fromStringCellRange(sheet,0));
} else if (type == CellType.NUMERIC) {
months = XDDFDataSourcesFactory.fromNumericCellRange(sheet,0));
}
}
}
}
if (null != months) {
int c = 1;
XDDFNumericalDataSource<Double> mView = XDDFDataSourcesFactory.fromNumericCellRange(sheet,c,c++));
XDDFNumericalDataSource<Double> nYork = XDDFDataSourcesFactory.fromNumericCellRange(sheet,c++));
XDDFNumericalDataSource<Double> washingt = XDDFDataSourcesFactory.fromNumericCellRange(sheet,c++));
XDDFNumericalDataSource<Double> engl = XDDFDataSourcesFactory.fromNumericCellRange(sheet,c++));
XDDFNumericalDataSource<Double> nZeal = XDDFDataSourcesFactory.fromNumericCellRange(sheet,c++));
if (null != sheet.getDrawingPatriarch() && null != sheet.getDrawingPatriarch().getCTDrawing()) {
sheet.getDrawingPatriarch().getCTDrawing().setNil();
}
// create sheets drawing
XSSfdrawing drawing = sheet.createDrawingPatriarch();
// needed objeccts for the charts
XSSFClientAnchor anchor;
XSSFChart chart;
XDDFChartLegend legend;
XDDFCategoryAxis bottomAxis;
XDDFValueAxis leftAxis;
XDDFLineChartData data;
XDDFLineChartData.Series series;
// ======first line
// chart============================================================
// create anchor
anchor = drawing.createAnchor(0,7,1,17,17); // anchor col7,row0 to col17,row17
// create chart
chart = drawing.createChart(anchor);
legend = chart.getorAddLegend();
legend.setPosition(LegendPosition.BottOM);
// create the axes
bottomAxis = chart.createCategoryAxis(AxisPosition.BottOM);
leftAxis = chart.createValueAxis(AxisPosition.LEFT);
leftAxis.setCrosses(AxisCrosses.AUTO_ZERO);
leftAxis.setCrossBetween(AxisCrossBetween.BETWEEN);
// create chart data
data = (XDDFLineChartData) chart.createData(ChartTypes.LINE,bottomAxis,leftAxis);
chart.setWorkbook(workbook);
// create series
series = (Series) data.addSeries(months,mView);
series.setSmooth(false);
series.setMarkerStyle(MarkerStyle.STAR);
series.setTitle("Blockers",new CellReference(sheet.getSheetName(),true,true));
series = (Series) data.addSeries(months,nYork);
series.setSmooth(false);
series.setMarkerStyle(MarkerStyle.STAR);
series.setTitle("Critical",2,washingt);
series.setSmooth(false);
series.setMarkerStyle(MarkerStyle.STAR);
series.setTitle("Major",3,engl);
series.setSmooth(false);
series.setMarkerStyle(MarkerStyle.STAR);
series.setTitle("Minor",4,nZeal);
series.setSmooth(false);
series.setMarkerStyle(MarkerStyle.STAR);
series.setTitle("Info",5,true));
System.out.println("Sheet name: " + sheet.getSheetName());
chart.plot(data);
solidLineseries(data,PresetColor.RED);
solidLineseries(data,PresetColor.ORANGE);
solidLineseries(data,PresetColor.YELLOW);
solidLineseries(data,PresetColor.BLUE);
solidLineseries(data,PresetColor.GREEN);
}
}
我尝试了多个建议,但似乎无济于事。
有人可以帮我解决此问题。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)