使用Apache POI将父列添加到Excel数据透视表

时间:2015-08-28 08:05:52

标签: java excel apache-poi pivot-table

我正在尝试使用Apache-POI在Excel中使用从数据库中检索的数据创建数据透视表。 目前我可以在数据透视表上创建普通列标签,但我希望能够添加父列表。

这就是我希望我的表格看起来的样子: enter image description here

这就是我创建数据透视表的方式:

XSSFPivotTable pivotTable = sheet.createPivotTable(new AreaReference(
    fromSheet.getSheetName() + "!" + tableRange),
    new CellReference("A6"));

pivotTable.addRowLabel(0); // the row label

pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 2, "Child Column 1");
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 3, "Child Column 2");

如何添加包含两个子列的父列?

1 个答案:

答案 0 :(得分:2)

您应该在“列标签”中添加父列而不是“值”。

但是POI API没有提供addColumn函数,请尝试下面的函数将父列添加到Column Label

public static void addColumLabels(XSSFPivotTable pivotTable, int columnIndex) {
    AreaReference pivotArea = getPivotArea(pivotTable);
    int lastColIndex = pivotArea.getLastCell().getCol() - pivotArea.getFirstCell().getCol();

    if (columnIndex > lastColIndex && columnIndex < 0) {
        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 <= lastColIndex; i++) {
        items.addNewItem().setT(STItemType.DEFAULT);
    }
    items.setCount(items.sizeOfItemArray());
    pivotFields.setPivotFieldArray(columnIndex, pivotField);

    // colfield should be added for the second one.
    CTColFields colFields;
    if (pivotTable.getCTPivotTableDefinition().getColFields() != null) {
        colFields = pivotTable.getCTPivotTableDefinition().getColFields();
    } else {
        colFields = pivotTable.getCTPivotTableDefinition().addNewColFields();
    }
    colFields.addNewField().setX(columnIndex);
    colFields.setCount(colFields.sizeOfFieldArray());
}