Apache poi 版本:3.12

今天在用poi解析excel文件时,碰到一个蛋疼的问题。

在我的excel文件中有一列是日期类型,例如有以下这么一行数据(日期中月份前面的0会自动去掉):

在读取注册日期这个数据时,返回了一串数字,变成了 42149,

断点调试到读取数据的代码,发现poi是正确识别的,但是在读取具体数据时发生了变化:

从上图可以看到,poi把日期数据也归类为 Cell.CELL_TYPE_NUMERIC 数字类型,

并且在cell中是正确读取到了 2015-05-25,但是在使用cell.getNumericCellValue()方法获取时却发生了变化,返回了42149.0

不知道它在里面进行了怎样的处理,但这不是我们想要的结果。

既然如此,我直接用字符串的方式获取可不可以呢?

把代码改为:

  1. case Cell.CELL_TYPE_NUMERIC:
  2. value = cell.getStringCellValue();
  3. DecimalFormat df = new DecimalFormat("0");
  4. value = df.format(value);
  5. break;

抛出如下异常:

  1. Caused by: java.lang.IllegalStateException: Cannot get a text value from a numeric cell
  2. at org.apache.poi.xssf.usermodel.XSSFCell.typeMismatch(XSSFCell.java:888)
  3. at org.apache.poi.xssf.usermodel.XSSFCell.getRichStringCellValue(XSSFCell.java:310)
  4. at org.apache.poi.xssf.usermodel.XSSFCell.getStringCellValue(XSSFCell.java:261)

说明不可以把它当作字符串类型来处理,

看方法倒是有个cell.getDateCellValue(),可是在什么时候进行调用呢,我要怎么能知道它是date类型?

通过查询资料发现,poi在Cell.CELL_TYPE_NUMERIC中又具体区分了类型,Date类型就是其中一种,把代码再做处理:

  1. case Cell.CELL_TYPE_NUMERIC:
  2. if (HSSFDateUtil.isCellDateFormatted(cell)) {
  3. Date date = cell.getDateCellValue();
  4. value = DateFormatUtils.format(date, "yyyy-MM-dd");
  5. } else {
  6. value = cell.getNumericCellValue();
  7. DecimalFormat df = new DecimalFormat("0");
  8. value = df.format(value);
  9. }
  10. break;

成功解决问题。

另外如果日期中有精确到日,精确到秒不同精度的,可以用cell.getCellStyle().getDataFormat()cell.getCellStyle().getDataFormatString()来获取格式。

标签:

  • 日期变数字
  • EXCEL
  • POI

poi解析excel读取日期为数字的问题相关推荐

  1. poi导入excel日期处理_poi解析excel读取日期为数字的问题

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

  2. poi读取Excel时日期为数字 的解决方法

    在使用poi解析Excel文件时,会发现,表格中的日期解析出来是一个数字,如下: 这是Excel表格的截图: 这是poi解析出来的这个日期的结果: 我们期望这个日期解析出来是:2015/8/21,而结 ...

  3. python excel写入日期变数字_解决python 读取excel时 日期变成数字并加.0的问题

    excel 文件内容如下: 读取excel内容: import xlrd from datetime import datetime from xlrd import xldate_as_dateti ...

  4. POI解析Excel表格

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. 这里实现poi解析Excel表格的例子,导入Exc ...

  5. 【poi-3.8】poi解析excel插入数据库详解

    文章目录 poi解析excel&插入数据库详解 说明 一.目的 二.准备工作 三.思路分析 四.流程图分析 五.核心代码 1:上传文件 2:获取输入流 3:初始化excel表 4:遍历行和列 ...

  6. Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据

    Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据 一.资源 什么是Apache POI Apache POI 不同类型的数据的表格(xls) 链接: ...

  7. ssh excel 导入 mysql_ssh poi解析excel并将数据存入数据库

    做完了一个报表导入数据库 功能 遇到几个问题:一 .Poi解析excel 的两种格式 xls xlsx. 二.form表单上传使用ajax 三.excel 单元格中有公式存在普通的读取方式读到的是公式 ...

  8. 为什么poi解析Excel慢?

    我们项目用xlsx配置业务数据,每个项目中会有500~600张表,解析耗时1分多钟. 尝试改成csv后,解析耗时5~6秒. 这不禁让我陷入思考,都是文本数据,为什么poi解析Excel会这么慢? 带着 ...

  9. springboot + poi 解析 excel

    Apache POI 是用 Java 编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对 Microsoft Office 格式档案读和写的功能. 本文使用 s ...

最新文章

  1. sublime如何实现函数折叠
  2. 解决MAVEN项目不扫描src下的mapper.xml文件
  3. UDP(socket)接和数据案例封装成C++代码
  4. mysql配置环境变量,进阶加薪全靠它!
  5. shell手册--笨鸟杰作
  6. paip.提升安全性-------用户口令密码的检测与生成
  7. Java 反编译工具哪家强?对比分析瞧一瞧
  8. 2.4GHz频段天线的选择
  9. 360浏览器怎么开java_360安全浏览器怎么打开javascript
  10. 图像去雾算法学习笔记1——何凯明博士基于暗通道先验的单幅图像去雾算法公式推导
  11. 服务器网口聚合操作文档,服务器网口聚合怎么操作
  12. 输入输出系统 ——I/O方式(程序查询、程序中断、DMA方式)
  13. MySQL基础 - 数据类型
  14. smzdm 扫地机器人_Dyson 360 EYE扫地机器人评测:这次的黑科技是否值得拥有?
  15. 【算法知识】先验分布、后验分布、似然估计
  16. Python 截取图片识别文字并翻译
  17. layui:图片上传
  18. 2.5 linux存储的基本管理
  19. 计算机卸载一个程序正确操作,卸载一个程序我在电脑里安装了一个一个山西省计算机考试系统21 爱问知识人...
  20. VeryCD的名言集锦

热门文章

  1. [Ubuntu 12.10] Openstack 多节点安装--前期准备网络拓扑
  2. cocos2d笔记——解析HelloWorldScene
  3. ORACLE限制IP访问数据库
  4. 关于为何推崇交易规范排序(CTOR)的原因
  5. 注意了,又有企业因BTC费用高转向BCH
  6. get传递中文产生乱码的解决方式汇总
  7. Android.mk简介
  8. gcd(辗转相除法)
  9. [转]数据结构:图的存储结构之邻接矩阵
  10. HPUX在oracle10g安装和卸载缩写