首页 文章

[apache poi xssf]:在新工作表中创建数据透视表(Java)

提问于
浏览
3

我修改了基本example以在新工作表中创建数据透视表 . 但是在打开新的xlsx文件时,我收到一个错误( Excel found unreadable content in... 后跟:

Removed Part: /xl/pivotTables/pivotTable1.xml part with XML error.  (PivotTable view) Load error. Line 2, column 561.
Removed Records: Workbook properties from /xl/workbook.xml part (Workbook)

这是我修改的代码段:

XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet("plain");

//Create some data to build the pivot table on
setCellData(sheet);

XSSFSheet sheet2 = wb.createSheet("pivot");

XSSFPivotTable pivotTable = sheet2.createPivotTable(new AreaReference("plain!$A$1:$D$4", null), new CellReference("pivot!$A$1"));
//Configure the pivot table
//Use first column as row label
pivotTable.addRowLabel(0);
//Sum up the second column
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 1);
//Set the third column as filter
pivotTable.addColumnLabel(DataConsolidateFunction.AVERAGE, 2);
//Add filter on forth column
pivotTable.addReportFilter(3);

我已经通过代码进行了调试,并没有看到明显的问题......

关于如何处理这个问题的想法?或者如果这是图书馆的错误?

谢谢

EDIT

问题是从上面代码中的单元格引用A1( new CellReference("pivot!$A$1") )开始 . 看来,如果我们从A1开始,表单上没有足够的空间来做其他格式化的透视网格 . 所以将其改为A5就可以了 . 虽然我仍然认为POI应该明确阻止人们通过抛出错误来做到这一点

1 回答

  • 1

    我在POI verion 3.14和3.16 Beta中遇到过这个问题,但是当我用源表引用作为第三个选项调用createPivotTable方法时,我发现这个问题适用于那些版本 .

    //Create some data to build the pivot table on
        setCellData(sheet);
    
        AreaReference source = new AreaReference("A1:D4", SpreadsheetVersion.EXCEL2007);
        XSSFSheet sheet2 = wb.createSheet("pivot");
    
        CellReference position = new CellReference("A3"); //convertColStringToIndex
    
        XSSFPivotTable pivotTable = sheet2.createPivotTable(source, position, sheet);
    

    这在POI 3.16 Beta和3.14中运行 .
    我在A1的CellReference也有同样的问题,是的,我同意它应该产生一些警告/错误 .

相关问题