POI操作excel中的日期格式处理
转载:http://blog.csdn.net/fuxiaohui/article/details/6239925
7.3.3 POI中Excel文件Cell的类型
在读取每一个Cell的值的时候,通过getCellType方法获得当前Cell的类型,在Excel中Cell有6种类型,如表7-3所示。
表7-3 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。
实际上Excel的数据格式有很多,还支持用户自定义的类型,在Excel中,选择一个单元格然后右键选择“设置单元格格式”,在弹出的单元格格式中选中“数字”,如图7-14所示。

图7-14 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种内置的数据格式,如表7-4所示。
表7-4 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)。
需要注意的一点是,所创建的Excel必须是在Microsoft Excel 97到Excel XP的版本上的,如果在Excel 2003中创建文件后,在使用POI进行解析时,可能会出现问题。它会把Date类型当作自定义类型。POI目前只提供对Microsoft Excel XP以下的版本的支持,在以后的版本中,希望会提供对Microsoft Excel 2003更好的支持。
一下是我的关键代码:
if(row.getCell(i).getCellType()==0){
if (HSSFDateUtil.isCellDateFormatted(row.getCell(i))) { //Excel Date类型处理
Date date = HSSFDateUtil.getJavaDate(row.getCell(i).getNumericCellValue());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
updateSetValueSB.append(sdf.format(date));
}else{
row.getCell(i).setCellType(1);
updateSetValueSB.append(row.getCell(i).getStringCellValue());
}
}else{
updateSetValueSB.append(row.getCell(i).getStringCellValue());
}
POI操作excel中的日期格式处理的更多相关文章
- POI处理Excel中各种日期格式问题
前不久写过一篇随笔<EXCEL解析之终极方法WorkbookFactory>,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种 ...
- POI处理Excel中的日期数据类型
在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...
- Java处理Excel中的日期格式
Java处理Excel中的日期格式 2011-12-23 17:34:03| 分类: java |举报 |字号 订阅 下载LOFTER 我的照片书 | 在Excel中的日期格式,其数值为距离1 ...
- java通过poi读取excel中的日期类型数据或自定义类型日期
Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12 poi处理excel时,当excel没 ...
- [转]使用PHPExcel判别和格式化Excel中的日期格式
From : http://renzhen.iteye.com/blog/799391 最近,在做一个导入功能,在系统中使用PHPExcel类库,读取上传的Excel文件,然后进行字段映射,最后将Ex ...
- python学习笔记(excel中处理日期格式)
涉及到处理excel文件中日期格式数据 这里自己整理下 两种方法 代码如下: @classmethod def get_time(cls, table, nrows): testtime = [] f ...
- 最近开发的项目,遇到用户上传excel文件并导入数据到系统这个需求,而有excel中有的单元格是日期格式,本文介绍怎么从excel中读取日期格式的数据。
可以先判断单元格的类型,有的日期是字符串存储的,有的是按日期存储的(单元格按数字解析),代码如下: Cell cell = row.getCell(); Date date = null; if (c ...
- 使用NPOI操作Excel文件及其日期处理
工作中经常遇到需要读取或导出Excel文件的情况,而NPOI是目前最宜用.效率最高的操作的Office(不只是Excel哟)文件的组件,使用方便,不详细说明了. Excel工作表约定:整个Excel表 ...
- java导入excel时处理日期格式(已验证ok)
在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判 ...
随机推荐
- [HAOI2016]找相同字符
题目描述 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两个子串中有一个位置不同. 输入输出格式 输入格式: 两行,两个字符串s1,s2,长度分别为 ...
- ●杜教筛入门(BZOJ 3944 Sum)
入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...
- poj 2425 AChessGame(博弈)
A Chess Game Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 3791 Accepted: 1549 Desc ...
- poj 2104 主席树(区间第k大)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 44940 Accepted: 14946 Ca ...
- C++函数的重载
两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参与形参的类型以及个数的最佳匹配,自动确定调用的函数,这就是函数的重载. 两个名字相同的函数必须具有不同的形参,这里的不同指的 ...
- Android Activity的任务栈和四大启动模式
在安卓系统中默认每次启动一个Activity时,系统会创建一个实例,并按照先进后出的原则放入任务栈中,当我们按back键时,就会有一个activity从任务栈顶移除,重复下去,直到任务栈为空,系统就会 ...
- Python 中的 if __name__ == '__main__' 该如何理解
__name__ 表示当前模块名, __main__ 表示正在运行的模块名. if __name__ == '__main__' 这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导 ...
- Maven集成dubbo时报错 Missing artifact com.alibaba:dubbo:jar:2.8.4
1.下载dubbo,地址:https://github.com/dangdangdotcom/dubbox . 2.将下载的压缩包解压. 3.命令行进入下载路径,执行mvn install -Dmav ...
- 【vuejs深入二】vue源码解析之一,基础源码结构和htmlParse解析器
写在前面 一个好的架构需要经过血与火的历练,一个好的工程师需要经过无数项目的摧残. vuejs是一个优秀的前端mvvm框架,它的易用性和渐进式的理念可以使每一个前端开发人员感到舒服,感到easy.它内 ...
- ubuntu14.04 安装PIL库出现OError: decoder jpeg not available 的解决方案
出现 OError: decoder jpeg not available 的原因是,没有装JPEG的库,同时要支持png图片的话还要装 ZLIB.FREETYPE2.LITTLECMS的库文件. 先 ...