JexcelApi和POI导入Excel日期识别成数字的解决方案

转载 2011年01月15日 14:07:00
用过Jxl或者POI导入Excel信息的朋友应该都遇到过这样的问题。日期格式的单元格有些会识别成数字单元格。(为什么说有些呢?因为在Excel文件中输入2008-3-18的日期可以正确导入,但是输入3-18的就会识别成数字。)关于这个问题我找了很久,都没有找到解答。现在解决了,所以记录以下,一是怕以后忘了,二是希望遇到这个问题的朋友可以少走弯路。

首先来分析一下这个问题的成因。既然两个开源包都有同样的问题,说明可能是Excel内部就是这样存储的。所以需要通过一些其他的方式来从NUMERIC Cell中把这些日期找出来。

有两种方式可以辨别NUMERIC Cell储存的是否是日期:

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

方法二:如果用的是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);   

       }    

   }  


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

poi解析excel读取日期为数字的问题

Apache poi 版本:3.12 今天在用poi解析excel文件时,碰到一个蛋疼的问题。 在我的excel文件中有一列是日期类型,例如有以下这么一行数据(日期中月份前面的0会自动去掉): ...
  • ole_triangle_java
  • ole_triangle_java
  • 2017年04月20日 09:17
  • 3733

java使用JexcelApi和POI两种方法操作excel

在java里面如何操作excel,其中有两种方法:JexcelApi和POI两种方法,参考网上别人做的,发现对于简单的操作,两种效果都不错。在其中JexcelApi操作时,对于在已有表格中添加数据,没...
  • u013766436
  • u013766436
  • 2016年03月16日 20:19
  • 3031

POI操作excel中的日期格式处理

转载:http://blog.csdn.net/fuxiaohui/article/details/6239925 7.3.3 POI中Excel文件Cell的类型 在读取每一个Cell的...
  • Jerome_s
  • Jerome_s
  • 2014年08月03日 09:09
  • 6030

poi excel批量导入 解决各类型的数据

String value=this.getValue((HSSFCell) row.getCell(position))   数字类型  时间类型 字符串类型验证没问题, 数字类型如果是1234.0...
  • myfmyfmyfmyf
  • myfmyfmyfmyf
  • 2014年07月09日 10:09
  • 17173

java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式

当使用POI处理excel的时候,遇到了比较长的数字,虽然excel里面设置该单元格是文本类型的,但是POI的cell的类型就会变成数字类型。  而且无论数字是否小数,使用cell.getNum...
  • CCLOVETT
  • CCLOVETT
  • 2013年11月15日 18:21
  • 36060

通用的POI导入Excel解决方案

通用的POI导入Excel解决方案 引言:在项目中,经常免不了要导入、导出Excel,导出Excel稍微简单点,制作一张模板,然后将查询之后的数据写入到模板中即可,导出程序可以做到一...
  • lang_niu
  • lang_niu
  • 2015年02月11日 23:34
  • 2515

POI处理excel日期格式问题(xlsx)

package com.wonders.task.excel.util; import com.wonders.task.excel.model.SendBo; import org.apache....
  • z69183787
  • z69183787
  • 2016年07月10日 20:02
  • 5513

POI 导出excel带小数点的数字格式显示不对解决方法

最近看到了一个问题就是java导出excel中带小数点的数字显示不对, 比如我想在excel中第一行显示:  3,000.0 但是在excle中导出的格式总是不带小数点 3000(非文本格式),而且也...
  • huluedeai
  • huluedeai
  • 2016年01月19日 18:27
  • 9526

POI 导入excel数据自动封装成model对象--介绍

1、项目开发中,导入输入应该是常用的基本功能。我们经常会使用excel将数据导入到数据库,在导入之前必须得将excel数据转换成javaBean对象 2、由于此功能经常使用,所以开发此工具类方便日后...
  • believer123
  • believer123
  • 2014年04月19日 23:23
  • 1926

java 保留小数与四舍五入以及时间日期的转换和excel读入与数据库写入

之前进行开发了一段小程序,开发过程中发现短短白来行的代码需要用到很多的知识现在进行总结 先贴代码,后面做详细的解释 public class ImportData { static Simp...
  • killer1989
  • killer1989
  • 2015年05月27日 10:53
  • 1472
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JexcelApi和POI导入Excel日期识别成数字的解决方案
举报原因:
原因补充:

(最多只允许输入30个字)