Как установить ячейку формата поля для сводной таблицы с Apache POI

Я хотел бы установить ячейку формата номера сводной таблицы. Значение поля Сумма баланса как # ##0 .

Сводная таблица, созданная с использованием кода на основе официального образца POI CreatePivotTable

Приведенный ниже код create и get CTPivotField pivotField . Но как установить его формат номера?

 pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 2); CTPivotField pivotField = pivotTable .getCTPivotTableDefinition() .getPivotFields() .getPivotFieldArray(2); 

В MS Excel это делается следующими шагами (см. Снимок экрана):

  1. щелкните правой кнопкой мыши на сводной таблице суммы баланса Value
  2. выберите « Настройки поля»
  3. щелкните Количество …
  4. установить формат ячеек

Помогите решить, совет или любую идею.

Установка ячейки формата чисел сводной таблицы с помощью Microsoft Excel

Формат полей сводной таблицы устанавливается CTDataField.setNumFmtId(long numFmtId) для значений и CTPivotField.setNumFmtId(long numFmtId) для столбцов и строк .

numFmtId – номер идентификатора формата. Доступные коды формата представлены в списке Формат ячеек – Пользовательская категория: введите описание изображения здесь Предопределенные коды формата, благодаря Ji Zhou – MSFT , находятся здесь:

 1 0 2 0.00 3 #,##0 4 #,##0.00 5 $#,##0_);($#,##0) 6 $#,##0_);[Red]($#,##0) 7 $#,##0.00_);($#,##0.00) 8 $#,##0.00_);[Red]($#,##0.00) 9 0% 10 0.00% 11 0.00E+00 12 # ?/? 13 # ??/?? 14 m/d/yyyy 15 d-mmm-yy 16 d-mmm 17 mmm-yy 18 h:mm AM/PM 19 h:mm:ss AM/PM 20 h:mm 21 h:mm:ss 22 m/d/yyyy h:mm 37 #,##0_);(#,##0) 38 #,##0_);[Red](#,##0) 39 #,##0.00_);(#,##0.00) 40 #,##0.00_);[Red](#,##0.00) 45 mm:ss 46 [h]:mm:ss 47 mm:ss.0 48 ##0.0E+0 49 @ 

Полный список предопределенных кодов формата в MSDN NumberingFormat Class

Ниже приведен пример применения полей сводной таблицы форматирования:

 package ru.inkontext.poi; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.DataConsolidateFunction; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.util.AreaReference; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.usermodel.XSSFPivotTable; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataFields; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Optional; public class CreatePivotTableSimple { 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)); } private static void setFormatDataField(XSSFPivotTable pivotTable, long fieldIndex, long numFmtId) { Optional.ofNullable(pivotTable .getCTPivotTableDefinition() .getDataFields()) .map(CTDataFields::getDataFieldList) .map(List::stream) .ifPresent(stream -> stream .filter(dataField -> dataField.getFld() == fieldIndex) .findFirst() .ifPresent(dataField -> dataField.setNumFmtId(numFmtId))); } public static void main(String[] args) throws IOException, InvalidFormatException { XSSFWorkbook wb = new XSSFWorkbook(); XSSFSheet sheet = wb.createSheet(); //Create some data to build the pivot table on setCellData(sheet); XSSFPivotTable pivotTable = sheet.createPivotTable( new AreaReference("A1:C6", SpreadsheetVersion.EXCEL2007), new CellReference("E3")); pivotTable.addRowLabel(1); // set second column as 1-th level of rows setFormatPivotField(pivotTable, 1, 9); //set format of row field numFmtId=9 0% pivotTable.addRowLabel(0); // set first column as 2-th level of rows pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 2); // Sum up the second column setFormatDataField(pivotTable, 2, 3); //set format of value field numFmtId=3 # ##0 FileOutputStream fileOut = new FileOutputStream("stackoverflow-pivottable.xlsx"); wb.write(fileOut); fileOut.close(); wb.close(); } private static void setCellData(XSSFSheet sheet) { String[] names = {"Jane", "Tarzan", "Terk", "Kate", "Dmitry"}; Double[] percents = {0.25, 0.5, 0.75, 0.25, 0.5}; Integer[] balances = {107634, 554234, 10234, 22350, 15234}; Row row = sheet.createRow(0); row.createCell(0).setCellValue("Name"); row.createCell(1).setCellValue("Percents"); row.createCell(2).setCellValue("Balance"); for (int i = 0; i < names.length; i++) { row = sheet.createRow(i + 1); row.createCell(0).setCellValue(names[i]); row.createCell(1).setCellValue(percents[i]); row.createCell(2).setCellValue(balances[i]); } } } 

https://github.com/stolbovd/PoiSamples

  • EPPlus Sort Pivot Table на DataField вместо RowField
  • Макросбрать все для сводных таблиц
  • Поворотные поля Ghost остаются в сводной таблице, но не находятся в данных
  • Перечислите элементы, не имеющие конкретного «SKU»?
  • Как переместить «подэлементы» в сводной таблице Excel в другой столбец?
  • Установите несколько слайсеров сразу в Excel
  • Внешняя таблица Excel Power Pivot Pivot?
  • Как изменить источник данных сводной таблицы в Excel?
  • Добавить столбец оборачиваемости в сводную таблицу с помощью PowerPoint
  • ClosedXML PivotTable ReportFilter несколько значений
  • Невозможно выполнить расчет Pivot Table для генерации .xlsx
  • Interesting Posts
    Давайте будем гением компьютера.