首页 > 解决方案 > Java POI PivotTable 设置行默认折叠

问题描述

我使用 Java POI XSSFSheet createPivotTable 创建数据透视表。

默认情况下,如何配置带有折叠项目的输出文件?

标签: javaexcelapache-poipivot-table

解决方案


此方法将折叠提供的级别上的行

void collapseRows(Integer level) {
    System.out.println("Collapse Level: " + level);

    XSSFSheet dataSheet = (XSSFSheet) pivotTable.getDataSheet();
    Set<String> colAValues = new LinkedHashSet<String>();

    for (Integer r = 1; r < dataSheet.getLastRowNum() + 1; r++) {
        Row row = dataSheet.getRow(r);
        if (row != null) {
            Cell cell = row.getCell(level);
            if (cell != null) {
                colAValues.add(cell.toString());
            }
        }
    }

    List<org.openxmlformats.schemas.spreadsheetml.x2006.main.CTItem> itemList =
        pivotTable.getCTPivotTableDefinition().getPivotFields().getPivotFieldArray(level).getItems().getItemList();
    Integer i = 0;
    org.openxmlformats.schemas.spreadsheetml.x2006.main.CTItem item = null;

    for (String value : colAValues) {
        item = itemList.get(i);
        item.unsetT();
        item.setX(i++);
        pivotTable.getPivotCacheDefinition().getCTPivotCacheDefinition().getCacheFields()
            .getCacheFieldArray(level).getSharedItems().addNewS().setV(value);
        item.setSd(false); // set False will collapse child item
    }

    while (i < itemList.size()) {
        item = itemList.get(i++);
        item.setSd(false); // set False will collapse row
    }
}

您还需要将依赖项添加到 project.xml 文件

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>ooxml-schemas</artifactId>
  <version>1.3</version>
</dependency>

推荐阅读