POI导出Excel时设置单元格类型为数值类型,消除左上小三角
来源:互联网 发布:lol外服盒子mac 编辑:程序博客网 时间:2024/05/17 04:47
背 景
最近做的一个ITFIN的项目中,后台需要用POI实现导出功能,导出的数据中有文本格式,也有货币格式,所以为了方便在将来导出的表格中做计算,存放货币的单元格需要设置为数值类型。
导出的Excel的单元格都是文本格式(单元格左上角有个小三角):
费了不少功夫,终于把“小三角”去掉了,这里总结并分享一下问题的解决方法。
通过poi导出excel的过程大致是这样的:
规定单元格的格式
↓
创建单元格
↓
设置单元格的格式
↓
设置数据的格式
↓
把数据存放到单元格中
↓
通过IO流输出
背景POI导出Excel时设置单元格类型为数值类型
要想存放数值的单元格以数值类型导出,其中最关键的步骤就是上面加粗的两步,设置单元格的格式和向单元格中存放数据。
核心代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
如上,有两个比较重要的点:
1、先用正则表达式判断数据是否为数值型,如果为数值型,则设置单元格格式为整数或者小数;
2、然后往单元格中存放数据的时候要设置数据的格式为double类型,如果查看poi的源码HSSFCell.java会发现设置数据的方法如下,所以用setCellValue(double)方法即可。
优化
到了这里,您可能以为万事大吉啊了,其实上面的代码有个陷阱,如果不经过大数据量的测试是发觉不出来的哦~~
如果数据量大的话,系统可能会报错“The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook”,原因是style创建的次数太多了,解决这个问题的方法很简单,在循环体外面创建单元格格式contextstyle(即把它当成一个“全局”变量),不要在循环内部创建。
正确的代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
最后导出的正确格式:
【 转载请注明出处——胡玉洋《POI导出Excel时设置单元格类型为数值类型》】
- POI导出Excel时设置单元格类型为数值类型,消除左上小三角
- 【POI框架实战】——POI导出Excel时设置单元格类型为数值类型
- Poi导出excel设置单元格数值格式
- asp设置Excel单元格类型为文本
- POI导出Excel及单元格的设置
- poi导出excel单元格样式设置
- POI获取Excel中单元格内容时,如果为数字格式获取类型为double的问题
- NPOI 设置EXCEL单元格格式为 数值
- POI 设置Excel单元格为文本格式
- POI设置Excel单元格格式 (数值,日期,文本等等)
- poi java导出excel时合并单元格
- POI 单元格类型CellType
- poi 导出excel(传入map类型)
- POI导出EXCEL带水印,以及单元格格式设置
- POI设置导出的EXCEL锁定指定的单元格
- java POI excel导出,并合并单元格设置宽度高度
- Java利用POI导出Excel设置单元格格式
- poi操作excel导出单元格设置不同格式的方法
- TCP/IP
- redis持久化
- GC Algorithms: Implementations
- 转载教程
- 微信小程序 --- 文件解析错误 SyntaxError: Unexpected end of JSON input
- POI导出Excel时设置单元格类型为数值类型,消除左上小三角
- 日本人真会玩,用无人机撑伞
- Postgres限制每个用户只能连接指定数量的session,防止服务器资源紧张
- 【29日下午】全球人工智能与机器人峰会暨AI & ROBOT 系列创新沙龙
- AR现阶段只能炒概念?不如换个实用的思路吧
- 创新榜单出炉,哪15家生物领域公司入了MIT的法眼?
- Java高级篇-1-Java基础知识快速过一遍
- Linux常用命令之cd
- Postgres设置特定数据库的连接数为0