POI对Excel单元格的格式的设置参数

本文介绍了使用Apache POI处理Excel时遇到的单元格格式问题,包括单元格宽度设置、数据格式转换以及格式化后显示###的解决方法。通过设置单元格宽度、调整数据类型和应用内置或自定义的格式化方式,可以实现对Excel文件的精细化控制。

POI对Excel单元格的格式的设置参数

最近在做导出Excel的功能封装,遇到了几个问题:

  • 单元格宽度问题
  • 数据不是数字格式问题
  • 格式化了之后显示的不是数字而是######的问题(其实是因为单元格宽度不够导致的无法显示格式化之后的内容)

下面先说说解决方法:

1、单元格宽度问题

这个问题有两个解决办法,一个是

sheet.autoSizeColumn(1);
sheet.autoSizeColumn(1, true);

这种是自适应,第一参数是列号,从0开始,第二参数是是否考虑合并单元格。

还有一种是固定的多宽,这个宽度值就交给自己去测试了:

sheet.setColumnWidth(1, 5000)

这个第二个参数是宽度,具体上面说了自己测试。5000就很宽了,看放什么了。

2、数据不是数字格式问题

这个看api的感觉应该是设置这么个参数,cell.setCellType(Cell.CELL_TYPE_NUMERIC);

但是实际上这个参数设置了不起作用,后来发现自己放的值是String类型,所以不行,后来改为了Double.valueOf(str)方法,发现还是不行,换成Double.parseDouble(str)就行了,原来前面的方法返回的是Double,后面的是double,封装类型也不行。。。

后来就统一把所有的参数设置为Object类型了,这样好转。

3、格式化后显示###

这里是因为宽度不够啦,所以我这里主要说一下怎么格式化好了。

其实Excel本身带了一部分的格式化,见下图

Excel格式设置

如上图所示,Excel自带了一部分格式,而poi的DataFormat中也自带了这些格式并对应了short值,如下所示:

“($#,##0_);[Red]($#,##0)”
6

“($#,##0.00);($#,##0.00)”
7

“($#,##0.00_);[Red]($#,##0.00)”
8

保留为过国际化用
0×17 – 0×24

“(#,##0_);(#,##0)”
0×25

“(#,##0_);[Red](#,##0)”
0×26

“(#,##0.00_);(#,##0.00)”
0×27

“(#,##0.00_);[Red](#,##0.00)”
0×28

“_($*#,##0_);_($*(#,##0);_($* \”-\”_);_(@_)”
0×29

“_(*#,##0.00_);_(*(#,##0.00);_(*\”-\”??_);_(@_)”
0x2a

“_($*#,##0.00_);_($*(#,##0.00);_($*\”-\”??_);_(@_)”
0x2b

“_($*#,##0.00_);_($*(#,##0.00);_($*\”-\”??_);_(@_)”
0x2c

“@” – This is text format
0×31

使用下面的代码来设置

CellStyle cellStyle  workBook.createCellStyle
DataFormat format  workBook.createDataFormat
cellStyle.setDataFormatformat.getFormat
cell.setCellStylecellStyle

接下来我会举例日期、小数、货币、百分比、中文大写、科学计数几种方式的格式化:

 1、日期格式

setCellValue ,,
//set date format
CellStyle cellStyle  workBookcreateCellStyle
DataFormat format workBookcreateDataFormat
cellStylesetDataFormatformatgetFormat"yyyy-MM-dd"
setCellStylecellStyle

2、小数格式

setCellValue
CellStyle cellStyle  workBookcreateCellStyle
cellStylesetDataFormatDataFormatgetBuiltinFormat"0.00"
setCellStylecellStyle

3、货币格式

setCellValue20000
CellStyle cellStyle  workBookcreateCellStyle
DataFormat format workBookcreateDataFormat
cellStylesetDataFormatformatgetFormat"¥#,##0"
setCellStylecellStyle

4、百分比格式

setCellValue
CellStyle cellStyle  workBookcreateCellStyle
cellStylesetDataFormatDataFormatgetBuiltinFormat"0.00%"
setCellStylecellStyle

5、中文大写格式

cell.setCellValue20000
CellStyle cellStyle  workBook.createCellStyle
DataFormat format workBook.createDataFormat
cellStyle.setDataFormatformat.getFormat"[DbNum2][$-804]0"
cell.setCellStylecellStyle

6、科学计数格式

setCellValue20000
CellStyle cellStyle  workBookcreateCellStyle
cellStylesetDataFormatDataFormatgetBuiltinFormat"0.00E+00"
setCellStylecellStyle

这里面一部分使用的是DataFormat.getBuiltinFormat(),是由于这部分格式化是Excel中自带的格式,具体自带的格式大家可以自己打开Excel看看,上图也有截出一部分。

到此POI的Excel的单元格格式化方式的一些问题就解决了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值