关于POI读取excel 2007 的问题

plutowang 2010-12-16 01:56:52
关于POI读取excel 2007 怎么判断读取的单元格时时间类型还是数字类型
...全文
1664 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
EvenShu 2011-11-16
  • 打赏
  • 举报
回复
在判断case Cell.CELL_TYPE_NUMERIC:
还需要判断一下:
if(DateUtil.isCellDateFormatted(cell)){
k = new DataFormatter().formatRawCellContents(cell.getNumericCellValue(), 0, "yyyy-mm-dd");// 格式化日期
}else{
k=cell.getNumericCellValue()+"";
}
break;

完整代码请看我的博客:http://blog.163.com/aishu_55
sos__sos 2011-04-11
  • 打赏
  • 举报
回复
有两种方式可以辨别NUMERIC Cell储存的是否是日期:

方法一:如果用的是POI,可以直接用HSSFDateUtil.isCellDateFormatted(cell)这个方法。
Java代码
case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
double d = cell.getNumericCellValue();
Date date = HSSFDateUtil.getJavaDate(d);
}

case HSSFCell.CELL_TYPE_NUMERIC:
if (HSSFDateUtil.isCellDateFormatted(cell)) {
double d = cell.getNumericCellValue();
Date date = HSSFDateUtil.getJavaDate(d);
}

方法二:如果用的是Jxl,可以将cell.getCellFormat 强制转换成 XFRecord。然后判断XFRecord.formatIndex 如果等于 58就是DateCell。
Java代码
if (cell.getType() == CellType.NUMBER) {
NumberCell nc = (NumberCell) cell;
XFRecord xfr = (XFRecord) nc.getCellFormat();
final int INDEX_OF_DATE = 58;
if(xfr.formatIndex == INDEX_OF_DATE) {
Date date = HSSFDateUtil.getJavaDate(nc.getValue());
content = dateformat.format(date);
}
}

if (cell.getType() == CellType.NUMBER) {
NumberCell nc = (NumberCell) cell;
XFRecord xfr = (XFRecord) nc.getCellFormat();
final int INDEX_OF_DATE = 58;
if(xfr.formatIndex == INDEX_OF_DATE) {
Date date = HSSFDateUtil.getJavaDate(nc.getValue());
content = dateformat.format(date);
}
}

得到的这个double不能直接拿来用。转换可以用HSSFDateUtil.getJavaDate(double date)这个方法。

我在肖申克 2010-12-22
  • 打赏
  • 举报
回复
要求对方是03版的文件,07的直接告诉他不行
plutowang 2010-12-22
  • 打赏
  • 举报
回复
明天再没满意答案就结贴了啊
software攻城师 2010-12-17
  • 打赏
  • 举报
回复
高手还没来啊,看来要用下下策勒。
plutowang 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 zzh200411 的回复:]
引用 1 楼 alpha_423 的回复:
Jakata Poi HSSF可以判断单元格类型,下面代码读excel2003时OK的,2007的你可以试一下

Java code

int cellType = cell.getCellType();
switch (cellType)
{
case Cell.CELL_TYPE_BOOLEAN:
……
+1
[/Quote]

上述方法07和03是一样的。。。
但是excel中 日期时间 和数字一样 也是数字类型 Cell.CELL_TYPE_NUMERIC
但是判断出是Cell.CELL_TYPE_NUMERIC 类型后03中还要用
HSSFDateUtil.isCellDateFormatted(cell) 此是方法来判断是不是时间类型
具体情况我在三楼已经说过。
而07中找不到有判断是不是时间的方法
请解决问题的人最好能自己先实践下,不要粘贴了事。。
zzh200411 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 alpha_423 的回复:]
Jakata Poi HSSF可以判断单元格类型,下面代码读excel2003时OK的,2007的你可以试一下

Java code

int cellType = cell.getCellType();
switch (cellType)
{
case Cell.CELL_TYPE_BOOLEAN:
……
[/Quote]+1
plutowang 2010-12-17
  • 打赏
  • 举报
回复
。。。14楼的方法。是实在搞不出来的下下策。。这个还要和用户沟通
我想应该有方法解决的。。
plutowang 2010-12-17
  • 打赏
  • 举报
回复
03中可以啊HSSFDateUtil.isCellDateFormatted(cell)是时间的返回true 否则返回false
07应该有对应的方法吧。。我没找到。。
weipj007 2010-12-17
  • 打赏
  • 举报
回复
现在的poi中的api好像分不出来的。要想其他办法了。
plutowang 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 weipj001 的回复:]
XSSFCell xCell = xRow.getCell(cellNum);

if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC)
[/Quote]

问题是我是循环取数据。。不知道取的数据是什么类型
这个方法时间类型和数字类型都能得到。怎么他们区分开来?
weipj007 2010-12-17
  • 打赏
  • 举报
回复
XSSFCell xCell = xRow.getCell(cellNum);

if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC)
tosshl 2010-12-16
  • 打赏
  • 举报
回复
excel全选所有单元格 右键-设置单元格格式-数字-文本
POI里全用Stringvalue 读
plutowang 2010-12-16
  • 打赏
  • 举报
回复
不用理11楼。。他是打酱油滴
liu_yang_0923 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 bored_zhang 的回复:]
这人我认识.....才给40分啊...果断不告诉他..呵呵..
[/Quote]

这个人我认识,知道,不说,太。。。。。
bored_zhang 2010-12-16
  • 打赏
  • 举报
回复
这人我认识.....才给40分啊...果断不告诉他..呵呵..
plutowang 2010-12-16
  • 打赏
  • 举报
回复
谢谢6楼,
但你的方法不行取出来的是一个数字。。并不是时间文本
plutowang 2010-12-16
  • 打赏
  • 举报
回复
没人回答么?自己顶下!!!
plutowang 2010-12-16
  • 打赏
  • 举报
回复
。。。郁闷死 我是根据后缀名判断是读取03还是07 基本没区别
只是07的类是XSSF打头
03的是HSSF打头用的
类不同。代码基本一样
但是没找到 07中与03中HSSFDateUtil对应的类。
想直接用用03的方法试试
但是03的HSSFDateUtil.isCellDateFormatted(cell)
需要的是HSSFCell类型的参数
07中用的单元格对象是XSSFCell类型 又不知道怎么强转。
网上找了好久都没找到才来csdn上找强人帮助。。
坐等啊。。我现在项目就差这一点点了
ThinkCat 2010-12-16
  • 打赏
  • 举报
回复
关注下,正要用到POI
加载更多回复(6)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧