gpt4 book ai didi

java - Apache POI中的多个列标签

转载 作者:行者123 更新时间:2023-12-04 21:52:35 25 4
gpt4 key购买 nike

我想用 apache poi 在 excel 中创建一个数据透视表。那部分本身工作正常,我得到了我想要的 table 。现在我想添加第二个 Column Label进一步分解数据,但我似乎无法正确添加第二列。

我当前(工作)的代码只有一列:

private void createPivotTotalOverview(XSSFSheet sheet) {
XSSFSheet data = workBook.getSheet("Total Cost Table");

CellReference c1 = new CellReference(0, 0);
CellReference c2 = new CellReference(data.getPhysicalNumberOfRows() - 1, data.getRow(0).getLastCellNum() - 1);

AreaReference ar = new AreaReference(c1, c2);
CellReference cr = new CellReference(CellAddress.A1.formatAsString());

XSSFPivotTable pivotTable = sheet.createPivotTable(ar, cr, data);

pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(9).setAxis(STAxis.AXIS_COL);
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(9).addNewItems();
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(9).getItems().addNewItem()
.setT(STItemType.DEFAULT);

pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(9);

pivotTable.addRowLabel(10);
pivotTable.addRowLabel(11);
pivotTable.addRowLabel(2);
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 8);
}

我尝试像这样添加第二列:
private void createPivotTotalOverview(XSSFSheet sheet) {
XSSFSheet data = workBook.getSheet("Total Cost Table");

CellReference c1 = new CellReference(0, 0);
CellReference c2 = new CellReference(data.getPhysicalNumberOfRows() - 1, data.getRow(0).getLastCellNum() - 1);

AreaReference ar = new AreaReference(c1, c2);
CellReference cr = new CellReference(CellAddress.A1.formatAsString());

XSSFPivotTable pivotTable = sheet.createPivotTable(ar, cr, data);

pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(9).setAxis(STAxis.AXIS_COL);
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(9).addNewItems();
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(9).getItems().addNewItem()
.setT(STItemType.DEFAULT);
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(12).setAxis(STAxis.AXIS_COL);
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(12).addNewItems();
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(12).getItems().addNewItem()
.setT(STItemType.DATA);

pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(9);
pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(12);
pivotTable.getCTPivotTableDefinition().getColFields().setCount(2);


pivotTable.addRowLabel(10);
pivotTable.addRowLabel(11);
pivotTable.addRowLabel(2);
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 8);
}

但是使用第二个代码,数据透视表似乎坏了,因为我可以打开 excel,但它不再显示该表。 Excel 询问我是否要尽可能多地恢复数据,然后它告诉我 Removed Part: /xl/pivotTables/pivotTable3.xml part with XML error. (PivotTable view) Load error. Line 2, column 0.
谁能帮我添加第二列?

最佳答案

colFields xl/pivotTables/pivotTable1.xml 中的元素应该是这样的

<colFields count="2">
<field x="9"/>
<field x="12"/>
</colFields>

对于多个 col 字段。但是您的代码添加了两个 colFields导致这一点的要素:
<colFields count="2">
<field x="9"/>
</colFields>
<colFields>
<field x="12"/>
</colFields>

这是错误的。

所以而不是
---
pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(9);
pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(12);
pivotTable.getCTPivotTableDefinition().getColFields().setCount(2);
...


...
pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(9);
pivotTable.getCTPivotTableDefinition().getColFields().addNewField().setX(12);
pivotTable.getCTPivotTableDefinition().getColFields().setCount(2);
...

请不要过度使用 Excel 的容差。为什么使用 .setT(STItemType.DATA)作为第二个 col 字段的项目类型?为什么不也 .setT(STItemType.DEFAULT)和第一个一样?类型 DATA导致 Excel 2007 崩溃。 Excel 365 似乎可以容忍这一点。

所以请使用:
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(12).getItems().addNewItem()
.setT(STItemType.DEFAULT);

顺便说一句:

build 者 AreaReference(CellReference topLeft, CellReference botRight)已弃用。使用 AreaReference(CellReference topLeft, CellReference botRight, SpreadsheetVersion version)反而。

关于java - Apache POI中的多个列标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51212401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com