Java-将CSV转为XLSX文件

J

首先我们引入依赖:

<!--APACHE POI-->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>4.1.1</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.1</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-collections4</artifactId>
      <version>4.4</version>
    </dependency>

    <!--JavaCSV-->
    <dependency>
      <groupId>net.sourceforge.javacsv</groupId>
      <artifactId>javacsv</artifactId>
      <version>2.0</version>
    </dependency>

JavaCSV 用来读取CSV文件内容,然后用Apache POI 来生成Workbook (即Excel文件),然后写入Sheet(工作簿),再把CSV内容写入行列,最后输出成File即可,非常简单。

下面是写的一个简单方法,csv格式的路径,返回xlsx格式的File。

下面是一些参考资料:


Apache POI是用来操作EXCEL的工具, 其中又分为几个类:
HSSF:操作Excel 97(.xls)格式
XSSF:操作Excel 2007 OOXML (.xlsx)格式,操作EXCEL内存占用高于HSSF
SXSSF:从POI3.8 beta3开始支持,基于XSSF,低内存占用。

使用POI的HSSF对象,生成Excel 97(.xls)格式,生成的EXCEL不经过压缩直接导出。
线上问题:负载服务器转发请求到应用服务器阻塞,以及内存溢出 。
如果系统存在大数据量报表导出,则考虑使用POI的SXSSF进行EXCEL操作。

HSSF生成的Excel 97(.xls)格式本身就有每个sheet页不能超过65536条的限制。
XSSF生成Excel 2007 OOXML (.xlsx)格式,条数增加了,但是导出过程中,内存占用率却高于HSSF.
SXSSF是自3.8-beta3版本后,基于XSSF提供的低内存占用的操作EXCEL对象。其原理是可以设置或者手动将内存中的EXCEL行写到硬盘中,这样内存中只保存了少量的EXCEL行进行操作。

EXCEL的压缩率特别高,能达到80%,12M的文件压缩后才2M左右。 如果未经过压缩、不仅会占用用户带宽,且会导致负载服务器(apache)和应用服务器之间,长时间占用连接(二进制流转发),导致负载服务器请求阻塞,不能提供服务。


一定要注意文件流的关闭
防止前台(页面)连续触发导出EXCEL
————————————————
版权声明:本文为CSDN博主「後雪寒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/houxuehan/article/details/50960259

在 POI 中,Workbook代表着一个 Excel 文件(工作簿),Sheet代表着 Workbook 中的一个表格,Row 代表 Sheet 中的一行,而 Cell 代表着一个单元格。
HSSFWorkbook对应的就是一个 .xls 文件,兼容 Office97-2003 版本。
XSSFWorkbook对应的是一个 .xlsx 文件,兼容 Office2007 及以上版本。
在 HSSFWorkbook 中,Sheet接口 的实现类为 HSSFSheet,Row接口 的实现类为HSSFRow,Cell 接口的实现类为 HSSFCell。
XSSFWorkbook 中实现类的命名方式类似,在 Sheet、Row、Cell 前加 XSSF 前缀即可。


作者:xu2604980
链接:https://juejin.im/post/5c09e559e51d451da152df9c
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

说点什么

avatar
  Subscribe  
提醒

分类目录

近期评论