Java [APACHE-POI]:将样式应用于透视表单元格
我正在尝试使用ApachePOI将一些单元格样式应用于代码生成的excel数据透视表 我找不到任何关于这方面的文档/示例,恐怕无法将单元格样式设置为透视表 我已经尝试在行上循环,但是Apache poi pivot表没有任何行 这是生成透视表的实际代码: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();
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));
}