在使用Apache的POT库读取Excel文档时候,出现了一个问题,就是,读取到的科学计数法时的值和Excel显示的不一样,网上给的做法一般都是使用NumberFormat来对字符进行格式化,但是存在一个问题,就在读取到到的科学计数法的字符串已经不是Excel文档显示的字符串了,所以即使格式化后,读取出来的字符串也是错误的,正确的做法是,把表格的Cell格式设置成字符串,然后再用字符串的方式来读取,如下代码所示:

Double d = cell.getNumericCellValue();
String s = d.toString();
if (s.contains("E")) {cell.setCellType(CellType.STRING);return cell.getStringCellValue();
} else {return s;
}

完整的代码如下:

Maven依赖:

<dependency><groupId>org.apache.xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>3.1.0</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version>
</dependency>

Java读取代码:

public class App {public static void main(String[] args) throws Exception {String fileName = "C:\\Users\\master\\Desktop\\test111.xls";Workbook workBook = null;InputStream inputStream = null;int columnCount = 0;String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);inputStream = new FileInputStream(new File(fileName));if ("xls".equalsIgnoreCase(fileType)) {workBook = new HSSFWorkbook(inputStream);} else {if (!"xlsx".equalsIgnoreCase(fileType)) {throw new Exception("文件格式" + fileType + "不支持");}workBook = new XSSFWorkbook(inputStream);}Sheet sheet = workBook.getSheetAt(0);int firstRowNum = sheet.getFirstRowNum();int lastRowNum = sheet.getLastRowNum();  columnCount = sheet.getRow(firstRowNum).getLastCellNum();for (int i = firstRowNum; i <= lastRowNum; i++) {Row row = sheet.getRow(i);if (row == null) {continue;}for (int j = 0; j < columnCount; j++) {Cell cell = row.getCell(j);if (cell == null) {continue;}String value = null;switch (cell.getCellType()) {case STRING:value = formatStringValue(cell);break;case NUMERIC:value = formatDoubleValue(cell);break;case BOOLEAN:value = formatBooleanValue(cell);break;case FORMULA:// 公式value = formatFormulaValue(cell);case BLANK:value = null;break;default:throw new Exception("表格有不支持的列类型:" + cell.getCellType());}System.out.print(value + "    ");}System.out.println();}workBook.close();inputStream.close();}private static String formatStringValue(Cell cell) {return cell == null ? null : cell.getStringCellValue();}private static String formatDoubleValue(Cell cell) {Double d = cell.getNumericCellValue();String s = d.toString();if (s.contains("E")) {cell.setCellType(CellType.STRING);return cell.getStringCellValue();} else {return s;}}private static String formatBooleanValue(Cell cell) {Boolean b = cell.getBooleanCellValue();return String.valueOf(b);}private static String formatFormulaValue(Cell cell) {return cell.getCellFormula();}
}

效果如下:

POI读取Excel表格时遇到科学计数法处理相关推荐

  1. Excel表格文本/数字/科学计数法的格式转换问题

    目录 目录 一.当一个单元格内是存的一个引用时,复制出去会后粘贴会发现是一串引用地址 问题描述 解决办法 效果 二.长数字不能以文本形式进行显示,会自动转为科学计数法 问题描述 解决办法 效果 一.当 ...

  2. C#转换Excel表格中的科学计数法数字

    如图,如果从Excel中获取的数值是科学计数法格式则带有"E", 将其转换为一般数字类型需要先转为double格式.

  3. 使用POI读取Excel表格中数据

    使用POI读取Excel表格中数据 已经在 使用POI读取Excel表格中数据2优化.(https://blog.csdn.net/qq_36570464/article/details/107053 ...

  4. 记录POI读取excel表格文件,空行校验

    如题,前几天在使用poi读取excel表时,有效数据行数只有几百行,但表格行数有几千行,结果调用sheet.getLastNum时空行也算在内了!本来解析读取就慢,现在更是浪费时间.查了一下终于看到一 ...

  5. php导出数字成科学计数法,php导出excel长数字显示成科学计数法格式的解决方案...

    php导出excel长数字显示成科学计数法格式的解决方案 首先,我们了解一下excel从web页面上导出的原理.当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所 ...

  6. PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法

    PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法 参考文章: (1)PL/SQL中查询Oracle大数(17位以上)时显示科学计数法的解决方法 (2)https://www. ...

  7. poiexcel 读取引用列_java用poi读取Excel表格中的数据

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

  8. PYTHON脚本将excl表格中的科学计数法转变为普通数值

    最近公司在开发自动化测试的上位机,在处理示波器的数据的时候发现示波器保存的csv文件的值是用科学计数法的,在此分享一种方法可以将csv文件中的科学计数法转换成普通数值并转存到excl文件中的方法 先上 ...

  9. PHP excel 导出时变为科学计数法的问题

    Ecel导出数据时,数字过大的话,会自动转换为科学计数法,显示不够友好.只有将数字类型转换为字符串类型即可. 1.将数字类型转换为字符串类型.由于PHP是弱类型语言,很多时候这方法并不奏效 2. 在该 ...

  10. POI读取Excel文件时,row.getCell(0).getStringCellValue()报错:数字转换异常

    在进行关键字驱动测试框架的搭建时,我们可能会遇到当单元格里的内容是手机号或者密码等数字时使用row.getCell(0).getStringCellValue()这个方法是会报错的,因为这牵扯到方法过 ...

最新文章

  1. 《团队合作大坑合集》
  2. go map(映射)的概念、3种创建方式及map的CRUD操作
  3. FFmpeg资料来源简单分析:libswscale的sws_getContext()
  4. setdata改数组里的值 微信小程序_今日艰难笔记redux小程序随记
  5. 网页错误排查 如何?
  6. 启动mysq服务_mysql安装、启动
  7. Python 3.6新特性(部分)
  8. sql添加约束相关示例
  9. ssh备份linux系统,远程自动备份 rsync+ssh+sshpass
  10. linkedblockingqueue使用_学会java这几个线程池的使用,会使得你的程序效率提升十倍...
  11. git pull 提示 There is no tracking information for the current branch
  12. 关于opencv中 tf_text_graph_ssd.py生成pbtxt报错的解决方案
  13. CryEngine5.3 问题
  14. 查询跟踪多家快递单号,筛选某一时间发货的单号
  15. mysql 按中文字段排序
  16. 电子邮件附件下载器简介
  17. 【计算机网络】第九章:无线网络
  18. 从零学Java(17)之字符串连接,你要成为小学生之友吗?
  19. 玩家角色信息是保存在服务器上吗,Reworld使用存储服务存储玩家的数据
  20. Camtasia喀秋莎2020中文版秘钥强大的录屏工具

热门文章

  1. 单片机基础知识大总结
  2. kodi资源_安装Kodi展示播放NAS电影
  3. 一纵一横,搭建完整数据分析体系
  4. 树莓派做下载机+Web服务器(Aria2下载+yaaw做UI+nginx)
  5. opencv 修改图片尺寸
  6. hp计算机u盘启动,惠普台式机u盘启动(免费分享惠普电脑u盘启动步骤)
  7. java create 透明图片_Java 如何生成透明背景色的图片
  8. 用Python3抓取并分析猫眼电影TOP100
  9. 【评价模型】模糊综合评价法 _数学建模 续更
  10. Poi-tl通过word模板生成文件页眉页脚冲突问题