[apache poi xssf]: создание сводной таблицы на новом листе (Java)

Я изменил базовый пример создания сводной таблицы на новом листе. Но при открытии нового файла 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);

Я отлаживал код и не вижу очевидной проблемы...

Мысли о том, как с этим можно справиться? или это баг с библиотекой?

Спасибо

ИЗМЕНИТЬ

Проблема заключается в том, чтобы начать со ссылки на ячейку A1 (new CellReference("pivot!$A$1")) в приведенном выше коде. Кажется, если мы начнем с A1, на листе не останется места для выполнения какого-либо другого форматирования сводной сетки. Так что изменение этого на A5 делает работу. Хотя я все еще думаю, что POI должен явно запрещать людям делать это, выдавая ошибку.


person labheshr    schedule 23.05.2016    source источник
comment
Какая это версия POI? А если не последняя, ​​то можно попробовать обновиться до последней версии 3.15-beta1, чтобы проверить, бывает ли там еще?   -  person centic    schedule 24.05.2016
comment
Это похоже на ошибку в POI, я думаю, что лучшим вариантом было бы сообщить об ошибке по адресу bz.apache.org/bugzilla/enter_bug.cgi?product=POI   -  person centic    schedule 24.05.2016
comment
Я попробую новую версию ... хотя и не решаюсь использовать ее в рабочей среде, поскольку она все еще находится в бета-версии.   -  person labheshr    schedule 24.05.2016


Ответы (1)


У меня была эта проблема в версии POI 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.
У меня также была такая же проблема с CellReference в A1, и да, я согласен, что это должно выдавать какое-то предупреждение/ошибку.

person Chris Hagn    schedule 02.12.2016
comment
Если вы можете выяснить, что должно вызвать ошибку, откройте сообщение об ошибке в Apache Ошибка POI. Если вы также включите код/логику, даже лучше! :) - person Gagravarr; 02.12.2016