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

标签 java excel sorting apache-poi pivot-table

是否可以在 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 数据透视表确实是一个奇怪的野兽,当您将"template"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-schemasooxml-schemaspoi-ooxml-schemas 都包含 OOXML 文档的 XML 模型,但后者被精简了。

关于java - 如何使用 Java 中的 Apache POI 库对数据透视表数据进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38470735/

相关文章:

c - 如何对结构数组进行qsort

java - Android - 通过多个字段(不同的对象/基元类型)比较自定义对象

vba - 检查字符串格式

java - 在指定时间内执行部分代码

java - 解析依赖项时出现 Maven 错误

java - Android:将 EditText 限制为数字

sql-server - 如何使用 DAX 函数转换日期?

r - 如何在 Excel 中显示这种不同?

jquery,将内部元素移动到第一个位置?

java - Extentreport 日志行正在重复