gpt4 book ai didi

java - XSSF(Apache POI) - 从数据透视表中的单列值添加多列标签

转载 作者:行者123 更新时间:2023-11-29 10:10:52 25 4
gpt4 key购买 nike

我目前正在使用 Apache POI 3.12 添加数据透视表。这是我的 sample.xlsx 文件:

enter image description here

现在我使用以下代码为上述数据创建数据透视表。

    File excel = new File("sample.xlsx"); 
FileInputStream fis = new FileInputStream(excel);
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFPivotTable pivotTable = sheet.createPivotTable(new AreaReference("A3:C7"), new CellReference("E3"));
pivotTable.addRowLabel(0);
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 1);
pivotTable.addDataColumn(1, true);
pivotTable.addReportFilter(2);
FileOutputStream fileOut = new FileOutputStream("output.xlsx");
wb.write(fileOut);
fileOut.close();
wb.close();

我的 output.xlsx 文件有以下数据透视表:

enter image description here

当我要在 Excel 中编辑数据透视表时,它会在页面字段而不是列字段中添加年份列。实际上我需要以下结果:

enter image description here

我无法从单个列值添加多个列标签。请你帮助我好吗?提前致谢

最佳答案

XSSFPivotTable 类处于@Beta 状态。所以这只能使用底层的低级对象。

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("sample.xlsx")); 
XSSFSheet sheet = wb.getSheetAt(0);

//the following creates a Pivot Table with 3 PivotFields (0 to 2) (3 Columns A3:C7); all dataField="false" at first
XSSFPivotTable pivotTable = sheet.createPivotTable(new AreaReference(new CellReference("A3"), new CellReference("C7")), new CellReference("E3"));

//the following makes PivotFields(0) an Axis-Field AXIS_ROW with 5 Items (5 Rows A3:C7). Why one Item for each row? I don't know.
//and it adds a new RowField for this
pivotTable.addRowLabel(0);

//the following makes PivotFields(1) a DataField and creates a DataColumn for this
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 1);
//pivotTable.addDataColumn(2, false); //not neccessary since addColumnLabel already adds a DataColumn

//now PivotFields(2) needs to be an Axis-Field AXIS_COL
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(2).setAxis(
org.openxmlformats.schemas.spreadsheetml.x2006.main.STAxis.AXIS_COL);

//PivotFields(2) needs to have at least one Item
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(2).addNewItems();
pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(2).getItems().addNewItem().setT(
org.openxmlformats.schemas.spreadsheetml.x2006.main.STItemType.DEFAULT);

//new ColField needs to be added
pivotTable.getCTPivotTableDefinition().addNewColFields().addNewField().setX(2);

//pivotTable.addReportFilter(2);
FileOutputStream fileOut = new FileOutputStream("output.xlsx");
wb.write(fileOut);
fileOut.close();
wb.close();

pivotTable.addDataColumn(1, true); 不是必需的,因为 addColumnLabel 已经添加了一个 DataColumn

关于java - XSSF(Apache POI) - 从数据透视表中的单列值添加多列标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35943812/

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