Excel格式改为Csv格式

系统一开始使用的Excel格式进行导出,但是在使用过程中,每次导出的数据量逐渐增多,达到了excel最大行数1048576。

一般会出现如下错误:

java.lang.IllegalArgumentException: Invalid row number (1048576) outside allowable range (0..1048575) at org.apache.poi.xssf.streaming.SXSSFSheet.createRow(SXSSFSheet.java:105)

这时为了能够满足业务发展的需求,我们把Excel格式改为了Csv格式,保证导出数据的正常

Csv格式的文件,其实就是一行行文本,然后每一行用逗号分隔。

修改为Csv格式之后,第一次尝试导出,出现了中文乱码的问题,把编码修改为GBK就可以解决了。

而后又出现用Excel文件打开文件,里面的数字一旦超过13位就默认采取科学计数法的方式进行展示,当然你可以用excel另存为其他文件,修复这个问题,但是作为开发者,不应该让使用者多出这么一个步骤。

后续在网上搜索解决方案,总体思路就是让excel认为这个数字是字符文本就可以,而不要当成数字来解析。

基本的解决方案都是在数字的前面或后面增加一个制表符,这样就不会影响文档的准确性,只是增加一个制表符即可,也即“\t”。

当我增加之后,我又尝试了一遍导出,但是仍然没有效果,之后又尝试前面增加,或者其他方式,依然没有任何效果。

后来突然觉得是不是在写的时候有特殊处理,然后就看了一下CsvWriter.writeRecord(String[])方法,果然发现一些猫腻,代码如下

if(!var2 && var1.length() >0) {

var1 = var1.trim();

}

以上代码在判断为true的情况下,就会对字符串进行前后清除空格的操作,其中var1就是需要写入的数字,var2是CsvWriter.writeRecord方法的第二个参数

后来改为调用CsvWriter.writeRecord(String[],true)方法,成功解决了问题

对于打开显示########的解决方法,同上类似。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转自:Php导入导出csv文件时的生僻字处理和格式控制 - 班登 - 博客 应用场景 Web应用中导入导出报表是一...
    jesse_xing阅读 2,166评论 1 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 文件格式(或文件类型)是指电脑为了存储信息而使用的对信息的特殊编码方式,是用于识别内部储存的资料。比如有的储...
    一只不靠谱的猿_阅读 3,893评论 0 10
  • Http协议详解 标签(空格分隔): Linux 声明:本片文章非原创,内容来源于博客园作者MIN飞翔的HTTP协...
    Sivin阅读 5,260评论 3 82
  • 刚开始使用TimeMeter记录的人,可能会花很多时间,想设计出一个完美的分类。其实这完全不必要,随着记录的增多,...
    多线程进化阅读 650评论 0 1