Java POI PivotTable设置默认折叠的行

时间:2019-01-03 15:07:33

标签: java excel apache-poi pivot-table

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

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

1 个答案:

答案 0 :(得分:0)

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

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>