alibaba/easyexcel

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

Open

#3620 aperta il 21 dic 2023

Vedi su GitHub
 (1 commento) (0 reazioni) (0 assegnatari)Java (7599 fork)batch import
help wanted

Metriche repository

Star
 (33.728 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

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格式就正确,但是很慢。

Guida contributor