alibaba/easyexcel

导出excel,导出数据字段24个,数据有100000行,耗时27秒,能不能优化减少耗时

Open

#3,495 opened on Oct 12, 2023

View on GitHub
 (1 comment) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

String fileName ="D:\test.xlsx"; ExcelWriter excelWriter = EasyExcel.write(fileName,TestVo.class).excelType(ExcelTypeEnum.XLSX) .inMemory(false) .autoCloseStream(false) .build(); List objects = new ArrayList(); for (int i = 0; i < 110000; i++) { TestVo testVo = new TestVo(); testVo.setSapCustomerCode(System.currentTimeMillis()+""+i); testVo.setOrderGoodsDtlId("名字"); objects.add(testVo); } List<List> testVoLists = Lists.partition(objects, 110000).stream().map(ArrayList::new).collect(Collectors.toList());

    ForkJoinPool forkJoinPool = new ForkJoinPool(100, TtlForkJoinPoolHelper.getDefaultDisableInheritableForkJoinWorkerThreadFactory(), null, false);
    forkJoinPool.submit(TtlRunnable.get(() -> testVoLists.parallelStream().forEach(m -> {
            WriteSheet writeSheet = EasyExcel.writerSheet(0, "名字").head(TestVo.class)
                    .registerWriteHandler(new CustomCellWriteHandler()).registerWriteHandler(EasyExcelUtil.getStyleStrategy())
                    .build();
            //写数据
            WriteTable writeTable = new WriteTable();
            excelWriter.write(m, writeSheet,writeTable);
    }))).join();
    excelWriter.finish();

Contributor guide