美文网首页
Excel格式改为Csv格式

Excel格式改为Csv格式

作者: 天空Daniel | 来源:发表于2017-07-07 16:20 被阅读0次

    系统一开始使用的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)方法,成功解决了问题

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

    相关文章

      网友评论

          本文标题:Excel格式改为Csv格式

          本文链接:https://www.haomeiwen.com/subject/mfqrhxtx.html