繁体   English   中英

如何使用 Java 中的 Apache POI 库对数据透视表数据进行排序

[英]How do you sort Pivot Table Data using the Apache POI library in Java

是否可以在 Java 中使用 Apache POI 对 XSSFPivotTable 数据进行排序? 目前我能够创建一个数据透视表,分配一个标签,并添加聚合函数,但在数据排序方面没有运气。 目前我的Java代码如下:

public XSSFSheet createPivotTable (XSSFSheet datasht, XSSFSheet destinationsheet) {
    XSSFPivotTable pivotTable = destinationsheet.createPivotTable(new AreaReference("$A:$AV"), new CellReference("A1"), datasht);
    pivotTable.addRowLabel(0);
    pivotTable.addColumnLabel(DataConsolidateFunction.MIN, 25);
    pivotTable.addColumnLabel(DataConsolidateFunction.MIN, 24);
    pivotTable.addColumnLabel(DataConsolidateFunction.MIN, 46);
    pivotTable.addColumnLabel(DataConsolidateFunction.MIN, 47);
    /*
    Insert code to sort pivot table data in ascending order here
    */
    return destinationsheet;
}

有没有人知道如何访问 XSSFPivotTable 的排序功能,或者知道这是否可行?

我看过的另一个选项是有一个模板 excel 文件,其中包含一个预先存在的数据透视表,配置我想要的方式(包括排序),它链接到 excel 中的命名范围。 然后,每次执行 Java 代码时,只需使用新数据更新模板文件中的命名范围。

然而,excel 数据透视表确实是一个奇怪的野兽,当您将“模板”excel 文档另存为新文件时,数据透视表区域引用始终更新为绝对值,即 =OLDFILENAME.xlsx!pivotdatarange 而不是 =NAMEFILENAME.xlsx !pivotdatarange。

所以我对这个选项的问题是是否可以修改 Excel 中现有数据透视表的区域参考?

干杯,

乔希

可以对数据透视表中的数据进行排序,但您必须使用 CT 类并且可能需要包含另一个依赖项。

按升序按第一列排序:

int indexOfSortColumn = 0;
pivotTable.getCTPivotTableDefinition()
    .getPivotFields()
    .getPivotFieldArray(indexOfSortColumn)
    .setSortType(STFieldSortType.ASCENDING);

indexOfSortColumn是输入区域中的索引。

如果你的编译器不能找到STFieldSortType,你需要更换你的依赖org.apache.poi:poi-ooxml-schemas上的依赖org.apache.poi:ooxml-schemas ooxml-schemaspoi-ooxml-schemas都包含 OOXML 文档的 XML 模型,但后者被精简了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM