通过混合方式处理需要在固定模板中大批量写入数据的excel的方法

业务需要在一个既存固定样式(列头,背景,固定列,过滤等等)的excel里面写入大量数据。

 

  已知XSSFWorkBook在大量写入数据时会有严重的性能问题,并导致内存泄漏,而SXSSFWorkBook适合写入大量数据,但不适合操作模板。

 

   直接介绍解决办法

通过XSSFWorkBook读入带有样式的模板

XSSFWorkbook wb = (XSSFWorkbook)WorkbookFactory.create(fis);

通过wb创建SXSSFWorkBook对象用作大量数据操作

SXSSFWorkbook sxw = new SXSSFWorkbook(wb,100);

关键点:

如果需要操作模板,比如读写或填充单元格、行,需要通过XSSFSheet对象

如删除某行

XSSFSheet orgSheet = wb.getSheetAt(0);
Row templateTypeRow = orgSheet.getRow(0);
orgSheet.removeRow(templateTypeRow);

如果要大批量写入数据,需要通过SXSSFSheet

SXSSFSheet templateSheet = sxw.getSheetAt(0);
for(int i=0;i<数据.length;i++){
    操作...
    if (i % 100 == 0) {
        templateSheet.flushRows();
    }
}
templateSheet.flushRows();

这里XSSFSheet与SXSSFSheet是相当于是可以混合操作同一个excel的sheet的。

但是要注意,不能用SXSSFSheet去操作XSSFSheet读入或者操作过的行,否则会报”不允许操作已经写入的行“的异常。

因此最好的做法是先用XSSFSheet去操作需要精细处理的某些模板填空,样式复制等等,然后再用SXSSFSheet操作批量数据写入

发布了14 篇原创文章 · 获赞 0 · 访问量 2212
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览