alibaba/easyexcel

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

Open

#3,620 opened on 2023年12月21日

GitHub で見る
 (1 comment) (0 reactions) (0 assignees)Java (7,599 forks)batch import
help wanted

Repository metrics

Stars
 (33,728 stars)
PR merge metrics
 (30d に merged PR はありません)

説明

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

コントリビューターガイド