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中的日期类型的单元格时,如果仅仅是判 ...
随机推荐
- [SDOI2017]序列计数
题目描述 Alice想要得到一个长度为nn的序列,序列中的数都是不超过mm的正整数,而且这nn个数的和是pp的倍数. Alice还希望,这nn个数中,至少有一个数是质数. Alice想知道,有多少个序 ...
- ●洛谷P3687 [ZJOI2017]仙人掌
题链: https://www.luogu.org/problemnew/show/P3687题解: 计数DP,树形DP. (首先对于这个图来说,如果初始就不是仙人掌,那么就直接输出0) 然后由于本来 ...
- 51nod 1204 Parity(并查集应用)
1204 Parity 题目来源: Ural 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 你的朋友写下一串包含1和0的串让你猜,你可以从中选择一个连续的子串 ...
- 中断下半部处理之tasklet
1.tasklet概述 下半部和退后执行的工作,软中断的使用只在那些执行频率很高和连续性要求很高的情况下才需要.在大多数情况下,为了控制一个寻常的硬件设备,tasklet机制都是实现自己下半部的最佳选 ...
- POJ 2832 How Many Pairs?
Description You are given an undirected graph G with N vertices and M edges. Each edge has a length. ...
- 【codevs 1911 孤岛营救问题】
·为了分析方便,可以先做一个题目简化.去掉"钥匙"这个条件,那么就是一个BFS或者SPFA--现在加上该条件.如本题只给出最多两种钥匙,当然你可以继续坚持BFS等方式,时间不会太差 ...
- bzoj3437小P的牧场 斜率优化dp
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1542 Solved: 849[Submit][Status][Discus ...
- python中的赋值操作和复制操作
之前一直写C#,变量之间赋值相当于拷贝,修改拷贝变量不会改变原来的值.但是在python中发现赋值操作本质是和C++中的引用类似,即指向同一块内存空间.下面通过一个例子说明: p=[0,1,2,3,4 ...
- SQL使用总结-like,MAX,MIN
1. 时间索引不容许使用like 对时间索引适应like,会时间索引变成字符串操作,成为遍历动作,失去索引价值. 错误写法: EXPLAIN SELECT AVG(data_value) AS av ...
- swift 初始化
知识点总结: 1.结构体 1.1.默认初始化方法:1.空初始化方法:2.成员初始化方法 struct Person{ var name = "tom" var age = } le ...