alibaba/easyexcel

填充excel 设置不一次全加载到内存中,就会出现合并问题

Open

#3.620 aberto em 21 de dez. de 2023

Ver no GitHub
 (1 comment) (0 reactions) (0 assignees)Java (7.599 forks)batch import
help wanted

Métricas do repositório

Stars
 (33.728 stars)
Métricas de merge de PR
 (Nenhuma PRs mesclada em 30d)

Description

image image

代码: // 每次查询的批大小 AtomicInteger number = new AtomicInteger(0); String pathName = "manage\src\main\resources\templates\成交率统计表.xlsx"; String name = "成交率统计表"; name = URLEncoder.encode(name, String.valueOf(StandardCharsets.UTF_8)) + ".xlsx"; response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename=" + name); ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(pathName).build(); FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build(); WriteSheet writeSheet = EasyExcel.writerSheet().build(); for (int i = (int) page.getCurrent(); i < totalRecords;) { i += batchSize; int current = 0; // 分页查询数据 if (batchSize == 10000 && page.getCurrent() == 1) { current = (i / batchSize); } else if (batchSize == 10000 || page.getCurrent() > 1) { current = (i / batchSize) + 1; } else { current = (i / batchSize); } Page batchPage = new Page<>(current, batchSize); IPage<Map<String, Object>> res = tReportService.queryTransactionRateStatisticsTableList( batchPage, condition.getFieldList(), whereSql.toString(), condition.getFieldSord()); List<Map<String, Object>> records = res.getRecords(); excelWriter.fill(records, fillConfig, writeSheet); } if (fields.length() != 0) { List<Map<String, Object>> lists = tReportService.querySumDataAll( page, fields.toString(), "tmp_transaction_rate_statistics_table", whereSql.toString()); Map<String, Object> data = lists.get(0); data.put("chengjiaolv_sum", data.get("chengjiaolv_sum").toString() + "%"); excelWriter.fill(data, fillConfig, writeSheet); HashMap<String, Object> hashMap = new HashMap<>(); hashMap.put("date", DateUtil.now()); excelWriter.fill(hashMap, fillConfig, writeSheet); excelWriter.finish(); }

FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.FALSE).build(); 设置了这个为False 就会这样,因为我是分两次去填充的,设置true格式就正确,但是很慢。

Guia do colaborador