Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 或 2019-10-12

poi处理excel时,当excel没有明确指明是哪个类型的数据时,poi很可能处理单元格的日期数据时就有可能是一串数字,而使用java程序基本无法转换。

为了解决以上的问题,本人收集了各种资料,目前来总结一下,供碰到此类问题的你作参考。

Excel数据处理:

Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化

1、数值格式(CELL_TYPE_NUMERIC):

1.纯数值格式:getNumericCellValue() 直接获取数据

2.日期格式处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式

1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)

所有日期格式都可以通过getDataFormat()值来判断

  1. yyyy-MM-dd-----
  2. yyyymd日---
  3. yyyym月-------
  4. md ----------
  5. HH:mm-----------
  6. hmm -------

接下来是针对excel各种数据类型来进入转换,基本涵盖所需要的,如果没有你需要的,可以在此基础上添加

  1. //获取单元格各类型值,返回字符串类型
  2. public static String getCellValueByCell(Cell cell) {
  3. //判断是否为null或空串
  4. if (cell==null || cell.toString().trim().equals("")) {
  5. return "";
  6. }
  7. String cellValue = "";
  8. int cellType=cell.getCellType();
  9. switch (cellType) {
  10. case Cell.CELL_TYPE_NUMERIC: // 数字
  11. short format = cell.getCellStyle().getDataFormat();
  12. if (DateUtil.isCellDateFormatted(cell)) {
  13. SimpleDateFormat sdf = null;
  14. //System.out.println("cell.getCellStyle().getDataFormat()="+cell.getCellStyle().getDataFormat());
  15. if (format == || format == ) {
  16. sdf = new SimpleDateFormat("HH:mm");
  17. } else if (format == || format == || format == || format == ) {
  18. // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
  19. sdf = new SimpleDateFormat("yyyy-MM-dd");
  20. double value = cell.getNumericCellValue();
  21. Date date = org.apache.poi.ss.usermodel.DateUtil
  22. .getJavaDate(value);
  23. cellValue = sdf.format(date);
  24. }else {// 日期
  25. sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  26. }
  27. try {
  28. cellValue = sdf.format(cell.getDateCellValue());// 日期
  29. } catch (Exception e) {
  30. try {
  31. throw new Exception("exception on get date data !".concat(e.toString()));
  32. } catch (Exception e1) {
  33. e1.printStackTrace();
  34. }
  35. }finally{
  36. sdf = null;
  37. }
  38. } else {
  39. BigDecimal bd = new BigDecimal(cell.getNumericCellValue());
  40. cellValue = bd.toPlainString();// 数值 这种用BigDecimal包装再获取plainString,可以防止获取到科学计数值
  41. }
  42. break;
  43. case Cell.CELL_TYPE_STRING: // 字符串
  44. cellValue = cell.getStringCellValue();
  45. break;
  46. case Cell.CELL_TYPE_BOOLEAN: // Boolean
  47. cellValue = cell.getBooleanCellValue()+"";;
  48. break;
  49. case Cell.CELL_TYPE_FORMULA: // 公式
  50. cellValue = cell.getCellFormula();
  51. break;
  52. case Cell.CELL_TYPE_BLANK: // 空值
  53. cellValue = "";
  54. break;
  55. case Cell.CELL_TYPE_ERROR: // 故障
  56. cellValue = "ERROR VALUE";
  57. break;
  58. default:
  59. cellValue = "UNKNOW VALUE";
  60. break;
  61. }
  62. return cellValue;
  63. }

java通过poi读取excel中的日期类型数据或自定义类型日期的更多相关文章

  1. Java通过poi读取excel中文件

    maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</a ...

  2. JAVA使用POI读取EXCEL文件的简单model

    一.JAVA使用POI读取EXCEL文件的简单model 1.所需要的jar commons-codec-1.10.jarcommons-logging-1.2.jarjunit-4.12.jarlo ...

  3. Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决

    Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决 引言: 在Java中 ...

  4. java用poi读取Excel表格中的数据

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版.Apache POI 代 ...

  5. [转载]Java读取Excel中的单元格数据

    目前网上能找到的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel impor ...

  6. Java实现POI读取Excel文件,兼容后缀名xls和xlsx

    1.引入所需的jar包: maven管理项目的话直接添加以下坐标即可: <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -- ...

  7. java 使用POI读取excel数据

    原文:http://doc.okbase.net/0201zcr/archive/161440.html 一.定义 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Ja ...

  8. java调用POI读取Excel

    HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls:XSSFWorkbook:是操作Excel2007的版本,扩展名是.xlsx: 1.注意点 getPhy ...

  9. Java通过poi创建Excel文件并分页追加数据

    以下的main函数,先生成一个excel文件,并设置sheet的名称,设置excel头:而后,以分页的方式,向文件中追加数据 maven依赖 <dependency> <groupI ...

随机推荐

  1. [Beta]第六次 Scrum Meeting

    [Beta]第六次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/5/14 22:00 30min 大运村公寓6F寝室 附Github仓库:WEDO 例会照片 (两人回 ...

  2. 第09组 Alpha冲刺(1/4)

    队名:软工9组 组长博客: https://www.cnblogs.com/cmlei/ 作业博客: 组员进度 ● 组员一(组长) 陈明磊 ​ ○过去两天完成了哪些任务 ​ ●文字/口头描述 ​ 初步 ...

  3. java 465端口发送邮件

    package com.fr.function; import java.io.IOException; import java.security.Security; import java.util ...

  4. PostgreSQL中的一些日志

    1.Write Ahead Log(WAL日志)预写日志(WAL)是保证数据完整性的标准方法.在有关交易处理的大多数(如果不是全部)书籍中都可以找到详细说明. 简而言之,WAL的核心概念是,只有在记录 ...

  5. Mysql关键字之Group By(一)

    原文地址,优先更新https://hhe0.github.io group by 是一个我们在日常工作学习过程中经常遇到的一个Mysql关键字.现总结其用法如下,内容会不断补充,出现错误欢迎批评指正. ...

  6. OpenGL基础汇总

    OpenGL(应用程序接口 即API)——用于访问图形硬件的可编程特性 1. 各种矩阵: 世界矩阵(World Matrix):世界矩阵确定一个统一的世界坐标,用于组织独立的物体形成一个完整的场景; ...

  7. Js限制Input框只能输入数字

    <input type="text" onkeyup="value=value.replace(/[^\d]/g,'')" /> <input ...

  8. Rufus软件

    Rufus软件(https://rufus.akeo.ie/)——制作启动盘必备,简易且开源.

  9. 使用SyncNavigator轻松实现数据库异地同步、断点续传、异构同步

    原文地址:https://blog.csdn.net/liushuijinger/article/details/7704410/ 最近一直在研究数据库同步的问题,在网上查了很多资料,也请教了很多人, ...

  10. 第6/7Beta冲刺

    1.团队成员 成员姓名 成员学号 秦裕航 201731062432(组长) 刘东 201731062227 张旭 201731062129 王伟 201731062214 2.SCRU部分 2.1各成 ...