一、POI设置Excel表格的单元格格式(在导出Excel表时设置各个单元格格式)

1、Excel的单元格格式 
图中的数据有数值、货币、时间、日期、文本等格式。这些数据格式在POI中的HSSFDataFormat类里都有相应的定义。 
HSSFDataFormat是HSSF子项目里面定义的一个类。类HSSFDataFormat允许用户新建数据格式类型。HSSFDataFormat类包含静态方法static java.lang.String getBuiltinFormat(short index),它可以根据编号返回内置数据类型。另外static short getBuiltinFormat(java.lang.String format)方法则可以根据数据类型返回其编号,static java.util.List getBuiltinFormats()可以返回整个内置的数据格式列表。 
在HSSFDataFormat里一共定义了49种内置的数据格式,如下面所示。

HSSFDataFormat的数据格式

内置数据类型 
编号

"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

在上面表中,字符串类型所对应的是数据格式为"@"(最后一行),也就是HSSFDataFormat中定义的值为0x31(49)的那行。Date类型的值的范围是0xe-0x11,本例子中的Date格式为""m/d/yy"",在HSSFDataFormat定义的值为0xe(14)。

2、POI中Excel文件Cell的类型 
在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如下面所示。

Cell的类型

CellType 
说明

CELL_TYPE_BLANK 
空值

CELL_TYPE_BOOLEAN 
布尔型

CELL_TYPE_ERROR 
错误

CELL_TYPE_FORMULA 
公式型

CELL_TYPE_STRING 
字符串型

CELL_TYPE_NUMERIC 
数值型

一般都采用CELL_TYPE_STRING和CELL_TYPE_NUMERIC类型,因为在Excel文件中只有字符串和数字。如果Cell的Type为CELL_TYPE_NUMERIC时,还需要进一步判断该Cell的数据格式,因为它有可能是Date类型,在Excel中的Date类型也是以Double类型的数字存储的。Excel中的Date表示当前时间与1900年1月1日相隔的天数,所以需要调用HSSFDateUtil的isCellDateFormatted方法,判断该Cell的数据格式是否是Excel Date类型。如果是,则调用getDateCellValue方法,返回一个Java类型的Date。

好了读完上面两段文字我想大家关于CELL类型和格式应该清楚了,更应该清楚的是到底怎么才能将‘设置单元格格式’改成文本然后再导出

解决方案:就是上面代码中的ExcelOut类里面createTableRow方法中的一段代码

HSSFCellStyle cellStyle2 = demoWorkBook.createCellStyle();

HSSFDataFormat format = demoWorkBook.createDataFormat();

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

cell.setCellStyle(cellStyle2);

以上转自:http://javacrazyer.iteye.com/blog/894758

注:用setDefaultColumnStyle可以设置列的格式 cellStyle2.setDataFormat(format.getFormat("@"));

二、处理大数的读取(将大数的科学计数法转化为正常格式,并作为字符串读入数据库)

目前见到的最简单的方法:

HSSFCell cell = row.getCell(0);

if(cell.getCellType == HSSFCell.CELL_TYPE_NUMERIC){

 cell.setCellType(HSSFCell.CELL_TYPE_STRING);

         String cellValue = cell.toString();

}

如果Excel表中是学号、身份证号等长数据,使用double cellValue=cell.getNumericCellValue()或者String cellValue=String.valueOf(cell.getNumericCellValue())得到的是科学计数形式,如****E**,而不是********(*表示数字),这种情况下除了利用以上方法,还可利用下面方法:

int cellValue_int = (int)cell.getNumericCellValue();

String cellValue=String.valueOf(cellValue_int);

这种强制转换的方式只适用于整数形式,小数形式请利用第一种方法。相对来说,第二种方法比较直接。

POI设置Excel表格的单元格格式及处理大数的科学计数问题相关推荐

  1. java 设置excel格式为单元格格式为数值,不是坑爹的自定义

    直接上代码 DataFormat df = workbook.createDataFormat(); // 此处设置数据格式 cellStyle.setDataFormat(df.getFormat( ...

  2. java poi对Excel表格进行单元行删除

    java poi对Excel表格进行单元行删除 前几天工作时,突然需要去使用POI 来对Excel 表格进行操作,其他的操作都都没什么问题,但是在需要删除某些单元行的时候碰到了一下小坑,记录下来,防止 ...

  3. 如何在 Excel 中复制单元格格式、添加水印?

    欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel 的使用技巧,了解如何在 Excel 中复制单元格格式.添加水印. 复制单元格格式,选择要复制的单元格,在 ...

  4. EXCEL中更改单元格格式后不刷新问题的解决方法

    EXCEL中更改单元格格式后不刷新问题的解决方法内容简介:excel文件中有一个日期列,想设为以YYYYMM这样的格式显示,便选择列后,点击格式=>单元格=>数字=>自定义,将格式设 ...

  5. 每日excel学习之单元格格式设置

    一.使用单元格格式工具美化表格 1.设置单元格格式 2.文字对齐方式 3.单元格边框 4.设置字体颜色 5.设置单元格背景颜色 6.例题:设置单元格<机械手表汇总>合并单元格并居中对齐,设 ...

  6. thinkphp设置excel表格的单元格边框颜色样式

    thinkphp设置excel表格单元格边框 //设置单元格边框 $styleThinBlackBorderOutline = array('borders' => array ('allbor ...

  7. EXCEL将默认单元格格式修改成常规

    方法一: 打开Excel,任意选中一单元格,单击鼠标右键,选择设置单元格格式. 在数字自定义类型中,找到前缀为[ − F 400 ] 的 类 型 格 式 ( 或 者 类 似 的 比 如 [ -F400 ...

  8. python-docx模块表格部分单元格格式调整

    仅修改文字,保留原来的格式 from docx import Document file = '测试.docx' document = Document(file) document.tables[0 ...

  9. sheetjs如何设置导出的单元格格式为文本

    我使用Sheetjs导出文件,其中需要设置导出的excel的某个单元格格式为文本. 解决方法:在导入sheetJS的xlsx.full.min.js之后,再导入 GitHub - gitbrent/x ...

最新文章

  1. Android学习笔记(七):多个Activity和Intent
  2. parted如何将磁盘所有空间格式化_CentOS下大于2T的硬盘格式化问题
  3. 临危不乱,.Net+IIS环境经常出现的问题及排障。(转)
  4. Disjoint Set
  5. html5游戏引擎-Pharse.js学习笔记(一)
  6. 港航环境变化引起的错误解决方法
  7. 同时多次调用存储规程_本体技术视点 | 神奇的Merkle树是如何实现存储层优化的?...
  8. Git笔记(32) 高级合并
  9. VMWare——window server 2008/2012 administrator 密码忘记,设置重置密码
  10. Atitit uke消防防火规范 attilax总结
  11. java batik svg_java使用batik转换svg文件
  12. 【SENCHA TOUCH】Sencha Touch ExtJs 给 Button 添加图片(二)
  13. MODIS R包下载数据
  14. linux的磁盘busy,Linux umount 报 device is busy 的处理方法
  15. samba服务器无法共享文件夹,samba服务器设置共享文件夹权限
  16. 你真的会用C语言的fscanf_s吗
  17. 联想think station D30安装系统的时候找不到硬盘的解决方法
  18. 微信智慧商圈-java-springBoot实例
  19. 目标检测One-stage和Two-stage的区别
  20. 任天堂ns显示育碧服务器错误是什么意思,网络连接错误代码

热门文章

  1. VFP调用Windows Media Player控件播放音乐、视频等
  2. matlab lsh,基于哈希的图像检索(LSH,ITQ)matlab代码
  3. Sqlserver 触发器
  4. vue学习之,导航钩子
  5. QML拖拽GridView元素重新排序示例
  6. 服务器CPU支持内存叠加,关于多路服务器每CPU需要对应的内存数详解
  7. iOS开发-支付宝手势解锁实现展示
  8. python实验三:P2P网络带宽数据主表Training_Master、用户信息更新表Training_Userupdate和登录信息表Training_LogInfo
  9. matlab剪切复制文件,matlab文件复制、剪切、删除
  10. 算法竞赛入门经典第二版:循环结构程序设计实例与习题