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。那么如何用一个小数来表示数字呢?