Java 利用POI导出Excel文件,以及CSV科学计数法问题

文章探讨了在Java中使用POI处理CSV文件时遇到的科学计数法问题,以及解决方案。通过在数字前添加特定字符避免科学计数法显示,但影响复制粘贴。对比CSV和Excel,作者选择了POI库,详细介绍了HSSFWorkbook和SXSSFWorkbook的使用,特别是针对大数据量导出时如何避免内存溢出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、研究背景

CSV文件问题

项目之前都使用CSV文件导出,导致过长的数字会显示为科学计数法,或者数值显示偏差;

解决办法
  • 在数字前加入英文符号的单引号',如此可以解决科学计数法的问题,但是用户打开CSV文件一般都是使用Microsoft Excel,此时在Excel文件中展示时,数字前会显示单引号'
  • 在数字前加入tab符号\t,如此可以解决科学计数法的问题,数据展示也没问题了;
新的问题

但对于本项目新的问题是:这些数字数据,客户可能会复制出来,进行二次操作使用,以上解决办法都无法使得复制出来的数值不带额外的符号,影响用户使用;所以我决定为了用户体验,更换导出工具为POI

二、CSV与Excel的对比

  • 由于CSV文件是纯文本文档,.xls和.xlsx文件是二进制文件,所以在导出excel确实比CSV麻烦,不能流式处理,导致占用比较大的内存,且耗时多一些;
  • 而且对于数据量的限制上,CSV是没有限制的,而Excel系列的文件都有一定的限制。
  • 不过,csv方式导出也存在问题。首先,如果用excel来打开csv,超过一定行数的数据都会看不见,这就是excel导出数据量限制的问题。 其次,如果你要导出一个身份证号码,手机号码,邮政编码等,纯数字构成的字符串,在excel中打开csv时,这些字段很容易被识别成数字,造成科学计数法等问题。

对于选择CSV还是Excel,各位大大可以根据自己的导出数据的需求选择,各有优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值