重写Excel图表时出现断言错误

问题描述

我正在使用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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...