gpt4 book ai didi

java - 使用 Apache POI 将列标签插入数据透视表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:42 29 4
gpt4 key购买 nike

我使用 Apache POI 3.11 创建了一个数据透视表。像这样:

FileInputStream file = new FileInputStream(new File(path+fname));

XSSFWorkbook workbook = new XSSFWorkbook(file);

XSSFSheet sheet = workbook.getSheetAt(0);
//area of pivot data
AreaReference a=new AreaReference("A1:J4");

CellReference b=new CellReference("N5");
XSSFPivotTable pivotTable = sheet.createPivotTable(a,b);

//insert row
pivotTable.addRowLabel(3);
pivotTable.addRowLabel(6);

//insert column
pivotTable.addColumnLabel(DataConsolidateFunction.COUNT, 5);

//export
FileOutputStream output_file =
new FileOutputStream(new File(path+"POI_XLS_Pivot_Example.xlsx"));
workbook.write(output_file);//write excel document to output stream
output_file.close(); //close the file

在我生成报告后,它正确地显示了该行。但它不显示列标签:

img

我想在我的数据透视表中显示列标签,如下所示:

img
(来源:pivot-table.com)

有人知道这个问题的解决方案吗?

谢谢。

最佳答案

以下方法(XSSFPivotTable.addRowLabel 的略微修改版本)添加了一个“正常”数据透视列标签:

public static void addColLabel(XSSFPivotTable pivotTable, int columnIndex) {
AreaReference pivotArea = new AreaReference(pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition()
.getCacheSource().getWorksheetSource().getRef());
int lastRowIndex = pivotArea.getLastCell().getRow() - pivotArea.getFirstCell().getRow();
int lastColIndex = pivotArea.getLastCell().getCol() - pivotArea.getFirstCell().getCol();

if (columnIndex > lastColIndex) {
throw new IndexOutOfBoundsException();
}
CTPivotFields pivotFields = pivotTable.getCTPivotTableDefinition().getPivotFields();

CTPivotField pivotField = CTPivotField.Factory.newInstance();
CTItems items = pivotField.addNewItems();

pivotField.setAxis(STAxis.AXIS_COL);
pivotField.setShowAll(false);
for (int i = 0; i <= lastRowIndex; i++) {
items.addNewItem().setT(STItemType.DEFAULT);
}
items.setCount(items.sizeOfItemArray());
pivotFields.setPivotFieldArray(columnIndex, pivotField);

CTColFields rowFields;
if (pivotTable.getCTPivotTableDefinition().getColFields() != null) {
rowFields = pivotTable.getCTPivotTableDefinition().getColFields();
} else {
rowFields = pivotTable.getCTPivotTableDefinition().addNewColFields();
}

rowFields.addNewField().setX(columnIndex);
rowFields.setCount(rowFields.sizeOfFieldArray());
}

关于java - 使用 Apache POI 将列标签插入数据透视表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26460141/

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