Java 如何使用ApachePOI设置数据透视表字段编号格式单元格

Java 如何使用ApachePOI设置数据透视表字段编号格式单元格,java,excel,apache-poi,pivot-table,Java,Excel,Apache Poi,Pivot Table,我想将数据透视表值字段余额和的数字格式单元格设置为###0 使用基于的代码创建的透视表 下面的代码执行创建和获取数据透视字段的操作。但是如何设置它的数字格式呢 pivotTable.addColumnLabel(DataConsolidateFunction.SUM,2); CTPivotField数据透视字段=数据透视表 .getCTPivotTableDefinition() .getPivotFields() .getPivotFieldArray(2); 在MS Excel中,这是按以

我想将数据透视表值字段余额和的数字格式单元格设置为
###0

使用基于的代码创建的透视表

下面的代码执行创建和获取数据透视字段的操作。但是如何设置它的数字格式呢

pivotTable.addColumnLabel(DataConsolidateFunction.SUM,2);
CTPivotField数据透视字段=数据透视表
.getCTPivotTableDefinition()
.getPivotFields()
.getPivotFieldArray(2);
在MS Excel中,这是按以下步骤进行的(请参见屏幕截图):

  • 右键单击余额透视表值之和
  • 选择字段设置
  • 单击数字
  • 设置格式单元格
  • 请帮忙做决定,提供建议或任何想法


    数据透视表字段的格式由
    CTDataField.setNumFmtId(long numFmtId)
    为值设置
    CTPivotField.setNumFmtId(long numFmtId)
    为列和行设置

    numFmtId
    是格式代码的id号。可用的格式代码在格式单元格列表-自定义类别中表示: 由于,预定义的格式代码如下所示:

    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 @    
    
    中预定义格式代码的完整列表

    以下是应用格式透视表字段的示例:

    包ru.inkontext.poi;
    导入org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    导入org.apache.poi.ss.SpreadsheetVersion;
    导入org.apache.poi.ss.usermodel.DataConsolidateFunction;
    导入org.apache.poi.ss.usermodel.Row;
    导入org.apache.poi.ss.util.AreaReference;
    导入org.apache.poi.ss.util.CellReference;
    导入org.apache.poi.xssf.usermodel.XSSFPivotTable;
    导入org.apache.poi.xssf.usermodel.xssfheet;
    导入org.apache.poi.xssf.usermodel.xssf工作簿;
    导入org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataFields;
    导入java.io.FileOutputStream;
    导入java.io.IOException;
    导入java.util.List;
    导入java.util.Optional;
    公共类CreatePivotTableSimple{
    私有静态void setFormatPivotField(XSSFPivotTable数据透视表,
    长字段索引,
    整数numFmtId){
    可选。不可用(数据透视表)
    .getCTPivotTableDefinition()
    .getPivotFields())
    .map(数据透视字段->数据透视字段
    .getPivotFieldArray((int)fieldIndex))
    .ifPresent(数据透视字段->数据透视字段
    .setNumFmtId(numFmtId));
    }
    私有静态void setFormatDataField(XSSFPivotTable数据透视表,
    长字段索引,
    长numFmtId){
    可选。不可用(数据透视表)
    .getCTPivotTableDefinition()
    .getDataFields())
    .map(CTDataFields::getDataFieldList)
    .map(列表::流)
    .ifPresent(流->流
    .filter(dataField->dataField.getFld()==fieldIndex)
    .findFirst()
    .ifPresent(dataField->dataField.setNumFmtId(numFmtId));
    }    
    公共静态void main(字符串[]args)引发IOException、InvalidFormatException{
    XSSF工作簿wb=新XSSF工作簿();
    XSSFSheet sheet=wb.createSheet();
    //创建一些数据以构建数据透视表
    setCellData(表格);
    XSSFPivotTable数据透视表=sheet.createPivotTable(
    新区域参考(“A1:C6”,电子表格版本.EXCEL2007),
    新单元参考(“E3”);
    数据透视表.addRowLabel(1);//将第二列设置为第1级行
    setFormatPivotField(数据透视表,1,9);//设置行字段numFmtId的格式=9 0%
    数据透视表.addRowLabel(0);//将第一列设置为第二级行
    数据透视表.addColumnLabel(DataConsolidateFunction.SUM,2);//对第二列求和
    setFormatDataField(数据透视表,2,3);//设置值字段numFmtId=3###0的格式
    FileOutputStream fileOut=新的FileOutputStream(“stackoverflow pivottable.xlsx”);
    wb.写入(文件输出);
    fileOut.close();
    wb.close();
    }
    私有静态void setCellData(XSSFSheet){
    String[]name={“Jane”、“Tarzan”、“Terk”、“Kate”、“Dmitry”};
    双[]百分比={0.25,0.5,0.75,0.25,0.5};
    整数[]余额={107634554102342235015234};
    Row Row=sheet.createRow(0);
    row.createCell(0.setCellValue(“名称”);
    row.createCell(1).setCellValue(“百分比”);
    行.createCell(2).setCellValue(“余额”);
    for(int i=0;i

    没有一种数字格式具有单个小数点,即0.0。那么如何用一个小数来表示数字呢?