[APACHE-POI]: применить стиль к ячейкам сводной таблицы - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь применить некоторый стиль ячейки к сводной таблице Excel, сгенерированной кодом с помощью Apache-poi.

Я не могу найти какую-либо документацию / пример по этому поводу, и я боюсь, что естьнет способа установить стиль ячейки в сводную таблицу.

Я пытался циклически перебирать строки, но в сводной таблице Apache-poi нет строки!

ЭтоФактический код, который создает сводную таблицу:

    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 [...]

Это результат: result pivot-table

Можно ли стилизовать сводную ячейку на основе значения ячейки? Что-то вроде:

if (cell.getValue().equals("Ricavi Vendita CEE ~ (353)")) {
    cell.setCellStyle("someStyle");
}

И тогда вы увидите результат, подобный этому: styled 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));
}

Этот код не может получить доступ к стилю поля такого цвета или фона. Мне нужно применить стили к полям строк строки.

...