Java [APACHE-POI]:将样式应用于透视表单元格

Java [APACHE-POI]:将样式应用于透视表单元格,java,excel,apache-poi,pivot,pivot-table,Java,Excel,Apache Poi,Pivot,Pivot Table,我正在尝试使用ApachePOI将一些单元格样式应用于代码生成的excel数据透视表 我找不到任何关于这方面的文档/示例,恐怕无法将单元格样式设置为透视表 我已经尝试在行上循环,但是Apache poi pivot表没有任何行 这是生成透视表的实际代码: XSSFSheet dataSheet = ((XSSFSheet) workbook.getSheet(sheetName)); int firstRow = dataSheet.getFirstRowNum();

我正在尝试使用ApachePOI将一些单元格样式应用于代码生成的excel数据透视表

我找不到任何关于这方面的文档/示例,恐怕无法将单元格样式设置为透视表

我已经尝试在行上循环,但是Apache poi pivot表没有任何行

这是生成透视表的实际代码:

    XSSFSheet dataSheet = ((XSSFSheet) workbook.getSheet(sheetName));

    int firstRow = dataSheet.getFirstRowNum();
    int lastRow = dataSheet.getLastRowNum();
    int firstCol = dataSheet.getRow(0).getFirstCellNum();
    int lastCol = dataSheet.getRow(0).getLastCellNum();

    CellReference topLeft = new CellReference(sheetName, firstRow, firstCol, false, false);
    CellReference botRight = new CellReference(sheetName, lastRow, lastCol - 1, false, false);

    AreaReference dataSheetAreaReference = new AreaReference(topLeft, botRight, null);

    List<Map<String, Object>> pivotWidgetFields = castedParams.getFields();
    List<Map<String, Object>> pivotRowFields = pivotWidgetFields.stream().filter(field -> field.get("area").equals("row")).collect(Collectors.toList());
    List<Map<String, Object>> pivotColumnFields = pivotWidgetFields.stream().filter(field -> field.get("area").equals("column")).collect(Collectors.toList());
    List<Map<String, Object>> pivotValueFields = pivotWidgetFields.stream().filter(field -> field.get("area").equals("data")).collect(Collectors.toList());

    XSSFSheet pivotSheet = ((XSSFSheet) workbook.createSheet("Pivot sheet"));
    XSSFPivotTable pivotTable = pivotSheet.createPivotTable(dataSheetAreaReference, new CellReference("A1"));
 // row and column fields setup here [...]
然后看到这样的结果:

提前谢谢

[更新]:

无法使用建议的重复答案更改单元格样式,例如颜色或背景色。 该解决方案仅在pivot字段上的数字格式方面对我有所帮助

private static void setFormatPivotField(XSSFPivotTable pivotTable,
                                            long fieldIndex,
                                            Integer numFmtId) {
    Optional.ofNullable(pivotTable
            .getCTPivotTableDefinition()
            .getPivotFields())
            .map(pivotFields -> pivotFields
                    .getPivotFieldArray((int) fieldIndex))
            .ifPresent(pivotField -> pivotField
                    .setNumFmtId(numFmtId));
}
该代码无法访问字段样式,例如颜色或背景。
我需要将样式应用于字符串行字段。

可能与@XtremeBaumer重复感谢您的提示,但尝试遵循该帖子,我仍然无法将某些样式应用于透视表字段编程。请将其作为更新包含在您的问题中。张贴您使用的新代码,并解释哪些失败/不起作用,以及是否存在任何异常等
private static void setFormatPivotField(XSSFPivotTable pivotTable,
                                            long fieldIndex,
                                            Integer numFmtId) {
    Optional.ofNullable(pivotTable
            .getCTPivotTableDefinition()
            .getPivotFields())
            .map(pivotFields -> pivotFields
                    .getPivotFieldArray((int) fieldIndex))
            .ifPresent(pivotField -> pivotField
                    .setNumFmtId(numFmtId));
}