m0_53956972 2023-03-19 14:48 采纳率: 16.7%
浏览 85
已结题

导出大数据量excel,在构建表格时缓慢,有哪些优化方案?

img

我使用的是SXSSFWorkbook,经过排查在构建表格这一块时非常缓慢,我有尝试过使用new ThreadPoolExecutor线程池,但还是很慢,友友们有好的优化方案嘛?

  • 写回答

2条回答 默认 最新

  • Ycj_3355 2023-03-19 17:10
    关注

    对于SXSSFWorkbook构建表格缓慢的问题,可以考虑以下几个优化方案:

    使用SXSSFRow和SXSSFCell:SXSSFWorkbook是基于XSSFWorkbook的,但是SXSSFWorkbook使用了一些优化技术,例如使用SXSSFRow和SXSSFCell代替XSSFRow和XSSFCell,从而提高了构建表格的效率。

    使用SXSSFDataValidationHelper:SXSSFWorkbook中提供了SXSSFDataValidationHelper,可以用于构建数据校验规则,从而提高了构建表格的效率。

    使用SXSSFSheet.setAutoFilter:SXSSFWorkbook中提供了SXSSFSheet.setAutoFilter,可以用于设置自动筛选,从而提高了构建表格的效率。

    使用SXSSFWorkbook.setCompressTempFiles:SXSSFWorkbook中提供了SXSSFWorkbook.setCompressTempFiles,可以用于设置是否压缩临时文件,从而提高了构建表格的效率。

    需要根据实际情况进行选择和优化,综合考虑效率、稳定性、可维护性等因素。

    以下是使用SXSSFWorkbook构建Excel的Java示例代码:

    
    import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class ExcelWriter {
        public static void main(String[] args) throws IOException {
            // 创建SXSSFWorkbook对象
            SXSSFWorkbook wb = new SXSSFWorkbook(100);
    
            // 创建Sheet对象
            XSSFSheet sheet = wb.createSheet("Sheet1");
    
            // 写入数据
            for (int rownum = 0; rownum < 1000000; rownum++) {
                org.apache.poi.ss.usermodel.Row row = sheet.createRow(rownum);
                for (int cellnum = 0; cellnum < 10; cellnum++) {
                    org.apache.poi.ss.usermodel.Cell cell = row.createCell(cellnum);
                    cell.setCellValue("value" + cellnum);
                }
            }
    
            // 输出Excel文件
            FileOutputStream out = new FileOutputStream("example.xlsx");
            wb.write(out);
            out.close();
    
            // 关闭SXSSFWorkbook对象
            wb.dispose();
        }
    }
    

    以上代码使用Apache POI库构建了一个包含1000000行、10列的Excel文件,可以作为SXSSFWorkbook构建Excel的参考。需要注意的是,SXSSFWorkbook需要占用大量的内存,需要根据实际情况进行调整和优化。
    参考于:Cursor 应用

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月19日
  • 创建了问题 3月19日

悬赏问题

  • ¥50 HAL ADCDMA单次触发转换
  • ¥15 关于#python#的问题:我知道这个问题对你们来说肯定so easy
  • ¥15 wpf datagrid如何实现多层表头
  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置