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

【开发指南】Spring Cloud集成POI完成Excel读写操作 POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft office格式档案读和写的功能,其中包括Excel,Word,PowerPoint等。 官方网站:poi.apache.org/ POI前置知识 1. 坐标 Excel中每一个单元格都是有一个坐标的,起始坐标为(0,0),也就是说起始行为第0行,起始列为第0列。 Excel中每一个Sheet也是有下标的,从0开始。 2. 数据类型 POI中定义了6种单元格数 阅读详情

Apache poi 版本:3.12

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

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

image

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

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

image

从上图可以看到,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()来获取格式。

标签: 
Java使用POI读取Excel的数据!!(包含日期、数字、公式等特殊格式的处理) Java使用POI读取Excel的数据 处理Excel最难搞的就是不同类型单元格的值的获取,所以需要写一个方法来处理,也就是第二个代码块。 根据业务需求不同,第二个方法可能需要自己改一改哦 获取Excel数据的方法有很多,及时是POI里面,也不止这一个方法 poi的jar包我下载的如图,可能并不是每一个都会用到 /** * 解析Excel文件 * @param filePath 文件路径 * @return 值列表 */ public static List<List<String 阅读详情

相关推荐

3DGS-to-PC实战指南:零代码实现3D高斯场景到点云/Mesh的高效转换

本文详细介绍了3DGS-to-PC工具如何实现3D高斯场景到点云/Mesh的高效转换,无需代码即可完成。通过实战案例和参数调优技巧,帮助用户快速掌握这一开源插件的使用方法,提升3D数据处理效率。特别适合建筑扫描、影视特效等领域的专业人士。

q1w3e5r7t9y的博客 276

poi解析excel

一.遇见的问题:   当单元格设置为日期类型时,cell.getCellStyle().getDataFormat()返回的值都为176。   poi jar包3.14以上不支持用cell.getCellType()判断类型的方法。   使用poi解析技术需要导入poi以及poi-ooxml两个jar包。 二.单元格的类型cell.getCellType():   HSSFCell.CE...

menghuannvxia的专栏 3794

Obsidian免费同步全攻略:手把手教你用OneDrive+Remotely Save插件跨设备同步笔记

本文提供了一份详细的Obsidian免费同步方案指南,核心是利用OneDrive云存储与Remotely Save插件实现跨设备笔记同步。文章手把手教学,涵盖插件安装、OneDrive授权配置、桌面端与移动端的同步设置,并解答了常见问题,帮助用户在不依赖官方付费服务的情况下,构建稳定、自主的免费同步工作流。

bash7scripter的博客 850

Java操作Excel中HSSFCell.CELL_TYPE_STRING、BOOLEAN、NUMERIC无定义解决方法

错误原因:jar包版本更新,官方改动; 解决方法: 导入CellType包import org.apache.poi.ss.usermodel.CellType使用CellType.STRING代替HSSFCell.CELL_TYPE_STRING其他同理。 新版: if(cell==null||cell.equals(null)||cell.getCellType()==CellTy...

weixin_30675967的博客 1278

一生一芯预学习:从零搭建Verilator仿真环境与NVBoard实战

本文详细介绍了如何从零搭建Verilator仿真环境,并完成NVBoard实战项目,为'一生一芯'预学习提供完整指导。内容包括环境配置、工具安装、波形生成、自动化构建及可视化调试技巧,帮助初学者快速掌握数字逻辑设计与仿真验证的核心技能。

keras9composer的博客 701

如何用Megatron-LM搭建多卡集群?手把手教你配置分布式训练环境

本文提供了一份详细的Megatron-LM多卡集群搭建实战指南。从硬件兼容性检查、软件栈版本对齐,到分布式并行策略(数据并行、张量并行、流水线并行)的配置与多节点启动脚本编写,手把手教你配置稳定高效的分布式训练环境,并分享了关键的排错与性能调优经验。

yellow的专栏 415

总结点一:jar包的升级导致CELL_TYPE_STRING、XSSFCell.CELL_TYPE_NUMERIC等无定义的问题

是这样的,今天试图复制以前小工具中关于excel读写的代码的时候,由于新的项目是maven构建的,之前的是java项目中新建一个lib的文件夹专门用来放用到的jar包的,所以这边用到的jar包我都去网上百度了对应的最新的依赖: 在判断格式的时候就出现问题了: 后来去网上一查,大概是因为jar升级,导致了一些方法的更新。 怎么改呢? 嗯,直接只保留后面的一个描述的英文单词就好了 还有,记得导入...

qq_39361350的博客 1万+

QMT量化交易桥接方案深度对比:从MiniQMT淘汰说起

量化交易系统中的API桥接,本质是解决本地终端与底层交易引擎之间的通信瓶颈。其核心原理在于绕过GUI封装、直连确定性执行层,从而获得低延迟、高可靠、可监控的指令通路。技术价值体现在策略实盘一致性提升、毫秒级响应保障及运维可控性增强。典型应用场景包括打板策略、T+0套利、高频网格等对时效与稳定性双敏感的自动化交易。本文聚焦国金证券QMT专业版生态,系统剖析DLL注入、HTTP反向代理、IPC共享内存与官方HTTP API四大桥接路径的性能边界、合规风险与工程落地成本,尤其深入解析qmt终端 client is

weixin_33892359的博客 457

关于Cell中的各种值的类型判断

switch (cell.getCellType()){ case Cell.CELL_TYPE_NUMERIC: //数字 cellValue = stringDateProcess(cell); break; case Cell.CELL_TYPE_STRING: //字符串 cellValue = String.valueOf(cell....

weixin_30318645的博客 3851

FTViewSE利用VB脚本制作简易日报表

罗克韦尔SE用VB做的简单的报表

z0800656的博客 3024

开源AI数字人DUIX:从零构建你的智能交互助手

本文详细介绍了如何利用开源AI数字人DUIX从零构建智能交互助手。文章阐述了DUIX作为开源项目的核心优势,包括低成本启动、低网络依赖和高度可定制性,并提供了从开发环境搭建、核心模块(AI模型、语音、形象)配置到个性化业务逻辑开发与最终部署的完整实践指南,帮助开发者快速掌握构建专属AI数字人的全流程。

weixin_29051811的博客 505

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

Apache poi 版本:3.12今天在用poi解析excel文件时,碰到一个蛋疼的问题。在我的excel文件中有一列是日期类型,例如有以下这么一行数据(日期中月份前面的0会自动去掉): 在读取注册日期这个数据时,返回了一串数字,变成了 42149,断点调试到读取数据的代码,发现poi是正确识别的,但是在读取具体数据时发生了变化: 从上图可以看到,poi把日期数据也归类为 Cell.CELL_T...

weixin_30825389的博客 1392

使用手机录制rosbag包

使用手机作为便携式数据采集设备来录制rosbag。

weixin_38582851的博客 616

java项目中Excel文件导入后日期数据解析变成数字的解决方法

在解析Excel 文件时,会发现表格中显示的日期会变成数字,实际上Excel 表格中存储日期数据的格式就是数字,但我们看到的是日期数据,所以直接从Excel 的 Cell中读取数据后就会出现 日期变成数字的假象。由于Excel 中的时间是以1900年为起点,读取得到的数字则是自1900年以来经过的天数差值,所以会得到一个数字的日期,要保存到数据库中Date类型只能进行转换。读取Excel 文件中的日期数据,可能会出现日期数据解析变成数字的情况。我的项目问题:需要的是Date,却获取到了Number类型。

qq_54412839的博客 1382

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java-web应用之poi日期转换问题

**背景:**最近老是在做poi导入,导出相关的功能,期间遇到一个导入日期不能转换的问题。 具体如下: 需求: 将这个导入模板的数据导入到oracle数据库中。导入模板模板中的日期格式如图: 可以看到,在表格中的日期格式是 yyyy年MM月这样的,二查看上述栏:发现是2016/6/1这种的。所以可以得出这个单元格是设置了日期格式的。 调试过程: 首先我是这样想的,使用poi进行解析然后将会获得的如2019年10月这样的字符串,然后进行截取转换为2019-10然后使用SimpleDateFormat类重新格式

qq_34149223的博客 940

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java导入excel年月日的格式转换后变成了别的数字

Java 导入 Excel 年月日格式转换后的数字问题解析 在日常的开发中,Java 开发者常常需要处理 Excel 文件。在使用 Apache POI、JExcelAPI 等库进行 Excel 的读写时,我们可能会面临一个常见的问题:Excel 中的日期格式在 Java 中处理后,变成了意想不到的数字。这篇文章将深入探讨...

weixin_40729258的博客 1273

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

poi解析excel遇到的问题

问题一 poi对excel版本问题可用 Workbook workbook; workbook = WorkbookFactory.create(upload); Sheet sheet=workbook.getSheetAt(0); maven 引入以来如下 &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/gro...

weixin_42402804的博客 1114

java 显示excel2007_java 读取Excel2007(poi)详解

jsp页面上传文件地址:后台接收//excel文件批量导入短信@RequestMapping("/importToContent.aa")public ModelAndView importToContent(HttpServletRequest request,@RequestParam("excelFile") MultipartFile file) throws Exception{scm....

weixin_33378701的博客 180

poi通过事件模式sax解析大excel文件,防止内存溢出

1.解析类 package com.cetc.ExcelPoi;...

Shea1992的博客 1174

jxl和poi读取excel出现日期变成数字的问题的查因及解决&jxl和poi读取各种日期格式的验证和对比

前两天接了个问题的处理,就是页面导入Excel表格,表里日期数据入库后变成了数字的问题。 Excel表格内容: 入库后的数据: 刚看到这个时是一脸懵,然后按照惯例自己随手测了下 这样不是没问题嘛,但是问题反馈方的大量数据已经生成,只能先表面临时解决(就是写个sql改,耗时最短,一般不推荐)。 完了后我细想,不对,临时解决不是长久办法,我要找出这个问题出现的原因,然后避免或解决该类问题。...

一几文的编程学习笔记。 2991

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

解决poi读取Excel读出数字的问题,完整代码及数据

a805814077的博客 4031

poi导入excel日期处理_POI处理Excel中各种日期格式问题

前不久写过一篇随笔《EXCEL解析之终极方法WorkbookFactory》,提到使用WorkbookFactory来处理Excel文件数据,最近发现一个问题就是这个办法不能很好的处理各种日期格式,比如下面这些:那么如何将这些格式正确识别并输出呢?下面来分享一下解决方法。其实答案已经在之前已经写过。需要回到之前比较笨重的那个办法,就是在读取单元格时对单元格中数据的种类做判断,再将数据做适当转换,P...

weixin_28782251的博客 6093

poi解析Excel时日期为数字的解决方法

转自:https://blog.youkuaiyun.com/yuefeicall/article/details/78799742 在使用poi解析Excel文件时,会发现,表格中的日期解析出来是一个数字,如下: 这是Excel表格的截图: 这是poi解析出来的这个日期的结果: 我们期望这个日期解析出来是:2015/8/21,而结果却是42237.什么原因呢?这个数字是什么呢?是以19...

a945919556的博客 3027

Poi 读取excel 对日期进行处理

1.最近做了一个批量导入功能 , 然后发现poi读取excel的日期类型会出现点问题 , 因为我的需求是需要区分出 yyyy/MM/dd ,HH:mm:ss ,yyyy/MM/dd HH:mm:ss 2.日期,数字的类型都是数值的, 所有需要对每一个进行区分 根据cell.getCellStyle().getDataFormat() 方法 可以得到excel 格子中的short类型的值 ,从断...

夜一 2735

Java 通过 POI 读取 Excel 表格中的数据(包含日期类型数据)

首先你的得有 poi 的 jar 包,或者使用 maven 导入 poi 的依赖 <!--POI报表--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</...

星辰里的月光 5553
上一篇: jQuery中的.bind()、.live()和.delegate()之间区别分析
下一篇: css超出一行省略号:text-overflow和white-space超出隐藏显示省略号
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值