1、问题分析

Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-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()值来判断

yyyy-MM-dd----- 14
yyyy年m月d日--- 31
yyyy年m月------- 57
m月d日  ---------- 58
HH:mm----------- 20
h时mm分  ------- 32

2、代码提供:

 //获取单元格各类型值,返回字符串类型public static String getCellValueByCell(Cell cell) {//判断是否为null或空串if (cell==null || cell.toString().trim().equals("")) {return "";}String cellValue = "";int cellType=cell.getCellType();switch (cellType) {case Cell.CELL_TYPE_NUMERIC: // 数字short format = cell.getCellStyle().getDataFormat();if (DateUtil.isCellDateFormatted(cell)) {SimpleDateFormat sdf = null;  if (format == 20 || format == 32) {  sdf = new SimpleDateFormat("HH:mm");  } else if (format == 14 || format == 31 || format == 57 || format == 58) {  // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)  sdf = new SimpleDateFormat("yyyy-MM-dd");  double value = cell.getNumericCellValue();  Date date = org.apache.poi.ss.usermodel.DateUtil  .getJavaDate(value);  cellValue = sdf.format(date);  }else {// 日期  sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  }  try {cellValue = sdf.format(cell.getDateCellValue());// 日期} catch (Exception e) {try {throw new Exception("exception on get date data !".concat(e.toString()));} catch (Exception e1) {e1.printStackTrace();}}finally{sdf = null;}}  else {BigDecimal bd = new BigDecimal(cell.getNumericCellValue()); cellValue = bd.toPlainString();// 数值 这种用BigDecimal包装再获取plainString,可以防止获取到科学计数值}break;case Cell.CELL_TYPE_STRING: // 字符串cellValue = cell.getStringCellValue();break;case Cell.CELL_TYPE_BOOLEAN: // BooleancellValue = cell.getBooleanCellValue()+"";;break;case Cell.CELL_TYPE_FORMULA: // 公式cellValue = cell.getCellFormula();break;case Cell.CELL_TYPE_BLANK: // 空值cellValue = "";break;case Cell.CELL_TYPE_ERROR: // 故障cellValue = "ERROR VALUE";break;default:cellValue = "UNKNOW VALUE";break;}return cellValue;}

java通过poi读取excel中的日期类型相关推荐

  1. java通过poi读取excel中的日期类型数据或自定义类型日期

    java通过poi读取excel中的日期类型数据或自定义类型日期 Java 读取Excel表格日期类型数据的时候,读出来的是这样的  12-十月-2019,而Excel中输入的是 2019/10/12 ...

  2. POI处理Excel中的日期数据类型

    在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...

  3. Java利用Apace POI读取Excel中数据

    Java利用Apace POI读取Excel中数据,解析数据 @Testpublic void readExcel() throws IOException{FileSystemView fsv = ...

  4. Java使用POI读取Excel文件

    上篇文章记录了简单的POI创建Excel文件,依赖导入可参考上篇 POI读取excel中公式 @Testpublic void testRead() throws Exception {//读取文件的 ...

  5. java poi 模板填数据库,java使用POI读取excel模版并向固定表格里填写数据详解

    java使用POI读取excel模版并向固定表格里填写数据详解:public class ExportExcelDemo { private HSSFWorkbook workbook = null; ...

  6. POI读取excel中读取小数位数过多,数值精度损失问题解决

    POI读取excel中读取小数位数过多,数值精度损失问题解决 参考来源 项目中需要用到读取excel功能,当excel中有计算公式时,读取到的数值就可能会出现多个小数点的问题 例如: 2.2 --&g ...

  7. 使用poi读取Excel中的数据到数据库

    大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 目录 大家好今儿给大家带来的是使用poi读取Excel中的数据到数据库 1.poi简单介绍 2.poi操作excel 3.代码部分(可 ...

  8. java使用poi读取excel表格

    前言 用户上传excel表格,后端读取excel中的数据并存入数据库. 这里只演示如何读取到excel表格中的内容,excel中包括图片.日期.字符串格式. 导入依赖 <dependency&g ...

  9. poi读取excel中的内容(带图片)

    项目中有一需求:需要读取excel中的信息,带图片,需要将每一行的图片,做对应,整理方法如下: 主要逻辑: 1,获取excel对象, 2,读取excel中所有的图片流,将图片所处的位置和图片流存在ma ...

最新文章

  1. 必须采用初始化列表一共有三种情况
  2. UIbutton系统按键(System)和图片按键(Custom)对比
  3. Val编程-按键响应模式
  4. php实现文字向左跑马灯,js实现文字跑马灯效果
  5. 王飞跃 | 社会机器:历史的起源与目标
  6. 3.15 Ext JS 之 Tooltip 的基本使用
  7. 理解Cookie,Session,Token
  8. MySQL之InnoDB存储引擎
  9. java 基础 ppt_《Java基础入门》PPT_传智播客.rar
  10. 使用 python 在多个word文件中提取关键字
  11. 泛微mysql密码_泛微OA 数据库维护笔记(e-cology)
  12. 阿里云服务器搭建 图文详细教程
  13. 暑期游戏阅历++plan01——游戏引擎发展史简记
  14. 盘点5款常用的网络拓扑图制作工具
  15. java开发实战小参考常见问题及处理
  16. 8.6 循环辅助:continue和break
  17. #GD32F307VET6# 等位替代海威华芯HHD1705001
  18. Geek Talk 033:舆情大数据可以为业务增长带来哪些帮助
  19. 【电商数仓】数仓搭建之明细数据(data warehouse detail -- DWD)层(用户行为数据之曝光、错误日志表、数据加载脚本,业务数据之评价、订单事实表)
  20. springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j

热门文章

  1. TeamTalk Netlib详解
  2. vscode中terminal不支持workon激活虚拟环境?试试修改默认shell
  3. ltoa() 、itoa()函数实现
  4. ORA-00933:SQL 命令未正确结束(1)
  5. java中测代码段运行时间及内存的方法
  6. 还在付费下论文吗?快来跟我一起白piao知网
  7. CTF线下赛AWD总结
  8. libjvm.so stripped
  9. linux添加理由,Linux 首次引入 nftables,你可能会喜欢 nftables 的理由
  10. 解读区块链技术中的“不可能三角”