700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > setcellvalue 格式_POI对Excel单元格的格式的设置参数

setcellvalue 格式_POI对Excel单元格的格式的设置参数

时间:2022-04-14 22:34:56

相关推荐

setcellvalue 格式_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自带了一部分格式,而poi的DataFormat中也自带了这些格式并对应了short值,如下所示:

内置数据类型

编号

"General"

0

"0"

1

"0.00"

2

"#,##0"

3

"#,##0.00"

4

"($#,##0_);($#,##0)"

5

"($#,##0_);[Red]($#,##0)"

6

"($#,##0.00);($#,##0.00)"

7

"($#,##0.00_);[Red]($#,##0.00)"

8

"0%"

9

"0.00%"

0xa

"0.00E+00"

0xb

"# ?/?"

0xc

"# ??/??"

0xd

"m/d/yy"

0xe

"d-mmm-yy"

0xf

"d-mmm"

0x10

"mmm-yy"

0x11

"h:mm AM/PM"

0x12

"h:mm:ss AM/PM"

0x13

"h:mm"

0x14

"h:mm:ss"

0x15

"m/d/yy h:mm"

0x16

保留为过国际化用

0x17 - 0x24

"(#,##0_);(#,##0)"

0x25

"(#,##0_);[Red](#,##0)"

0x26

"(#,##0.00_);(#,##0.00)"

0x27

"(#,##0.00_);[Red](#,##0.00)"

0x28

"_($*#,##0_);_($*(#,##0);_($* \"-\"_);_(@_)"

0x29

"_(*#,##0.00_);_(*(#,##0.00);_(*\"-\"??_);_(@_)"

0x2a

"_($*#,##0.00_);_($*(#,##0.00);_($*\"-\"??_);_(@_)"

0x2b

"_($*#,##0.00_);_($*(#,##0.00);_($*\"-\"??_);_(@_)"

0x2c

"mm:ss"

0x2d

"[h]:mm:ss"

0x2e

"mm:ss.0"

0x2f

"##0.0E+0"

0x30

"@" - This is text format

0x31

使用下面的代码来设置

1

2

3

4

CellStylecellStyle=workBook.createCellStyle();

DataFormatformat=workBook.createDataFormat();

cellStyle.setDataFormat(format.getFormat("@"));

cell.setCellStyle(cellStyle);

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

1、日期格式

Java

1

2

3

4

5

6

cell.setCellValue(newDate(,5,5));

//set date format

CellStylecellStyle=workBook.createCellStyle();

DataFormatformat=workBook.createDataFormat();

cellStyle.setDataFormat(format.getFormat("yyyy-MM-dd"));

cell.setCellStyle(cellStyle);

2、小数格式

Java

1

2

3

4

cell.setCellValue(1.2);

CellStylecellStyle=workBook.createCellStyle();

cellStyle.setDataFormat(DataFormat.getBuiltinFormat("0.00"));

cell.setCellStyle(cellStyle);

3、货币格式

Java

1

2

3

4

5

cell.setCellValue(20000);

CellStylecellStyle=workBook.createCellStyle();

DataFormatformat=workBook.createDataFormat();

cellStyle.setDataFormat(format.getFormat("¥#,##0"));

cell.setCellStyle(cellStyle);

4、百分比格式

Java

1

2

3

4

cell.setCellValue(20);

CellStylecellStyle=workBook.createCellStyle();

cellStyle.setDataFormat(DataFormat.getBuiltinFormat("0.00%"));

cell.setCellStyle(cellStyle);

5、中文大写格式

Java

1

2

3

4

5

cell.setCellValue(20000);

CellStylecellStyle=workBook.createCellStyle();

DataFormatformat=workBook.createDataFormat();

cellStyle.setDataFormat(format.getFormat("[DbNum2][$-804]0"));

cell.setCellStyle(cellStyle);

6、科学计数格式

Java

1

2

3

4

cell.setCellValue(20000);

CellStylecellStyle=workBook.createCellStyle();

cellStyle.setDataFormat(DataFormat.getBuiltinFormat("0.00E+00"));

cell.setCellStyle(cellStyle);

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。