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

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()值来判断

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

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

//获取单元格各类型值,返回字符串类型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;  //System.out.println("cell.getCellStyle().getDataFormat()="+cell.getCellStyle().getDataFormat());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中的日期类型

    1.问题分析 Java 读取Excel表格日期类型数据的时候,读出来的是这样的 12-十月-2020,而Excel中输入的是 2020/10/12 或 2020-10-12 poi处理excel时,当 ...

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

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

  3. Java使用POI读取Excel文件

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

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

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

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

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

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

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

  7. POI读取Excel模板并导出大量数据

    POI读取Excel模板并导出大量数据 我在使用XSSFWorkbook读取Excel模板并导出大量数据(百万级)时,发现很长时间没有响应,debugger模式发现在读取第三四十万条数据时,程序直接停 ...

  8. poi读取excel多层表头模板写入数据并导出

    poi读取excel多层表头模板写入数据并导出 这两天刚好写excel,写了一份自定义表头的,写了一份模板的,这里展示一份读取excel模板写入数据并导出的 //title excel的名称 head ...

  9. python3读取excel某一列_怎样用python,读取excel中的一列数据!python读取excel某一列数据...

    Python 如何循环读取csv或者excel中的一列数据,写入到中搜索 是可以 a.csv复制到 b.csv中 import csv def foo(): with open('a.csv', 'r ...

最新文章

  1. python 绘图脚本系列简单记录
  2. 买房签定金合同或转让合同之前需要了解到的一些问题
  3. 微软VS.NET(visual studio.net)中FreeTextBox控件的详细使用视频教程
  4. oracle_plseq客户端中文乱码
  5. 借组磁带机求第K小元素
  6. mysql怎么通过frm和ibd文件还原数据
  7. 【VS开发】C++线程安全
  8. Usermod 命令详解
  9. dhl:mvc用户登陆身份验证
  10. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序
  11. 2019年程序员薪酬报告:平均年薪超70万!40岁后,这类人不“保值”了
  12. OS复习——设备管理习题
  13. shell编程中配置文件的使用
  14. JPA的双向一对一关联实现示例
  15. Lua初学习 9-13_04 require moudle
  16. C语言每日一练——第88天:汉诺塔问题(河内塔)
  17. 一筐鸡蛋c语言编程,求答案-求答案?一筐鸡蛋?求答案?一筐鸡蛋:1个1个拿,正好拿完2个2 爱问知识人...
  18. 办公自动化工具-Excel文件、sheet合并工具
  19. 用Java正则替换手机号中间4位数
  20. 放弃csv,拥抱feather文件

热门文章

  1. 查看node的位置_升级Node版本RN项目运行报错cb.apply is not a function
  2. 使用两个队列实现一个栈
  3. HDU 1404 Digital Deletions(博弈 + SG函数打表)
  4. Gauss高斯消元——模板
  5. CF938G Shortest Path Queries(线性基/线段树分治/异或)
  6. 牛客题霸 [ 集合的所有子集] C++题解/答案
  7. [学习笔记] 二次剩余
  8. ybtoj洛谷P4406三角形面积并(扫描线)
  9. AT2161-[ARC065D]シャッフル/Shuffling【dp】
  10. BZOJ 3513: [MUTC2013]idiots [FFT]