Excel导出多sheet
程序员文章站
2022-07-13 12:58:03
...
今天做了一个功能,要根据年份导出月平均水文监测结果
不同月份用不同的sheet展示
因为从前只做过单个sheet,再加上这次犯了个很蠢的错误,觉得很有意思就记录下来了
File file = ExcelUtil.getExcelTemplateByName("平均水文检测结果.xlsx");
Workbook workbook = com.xiaoleilu.hutool.poi.excel.ExcelUtil.loadBook(file);
StyleSet styleSet = new StyleSet(workbook);
//获取所有月份
Map<String, List<Map<String, Object>>> monthGroup = dataList.stream().collect(Collectors.groupingBy(m -> m.get("IMPEDITION") == null ? "无" : m.get("IMPEDITION") + ""));
int monthSize = monthGroup.keySet().size();//月份
for (int i = 0; i < monthSize - 1; i++) { //复制出 n-1 个工作簿
workbook.cloneSheet(0);
}
int index = 0;
for (String month : monthGroup.keySet()) { //写数据
Sheet sheet = workbook.getSheetAt(index);
String str1 = month.substring(0, month.indexOf("年"));
String str2 = month.substring(str1.length() + 1, month.length());
workbook.setSheetName(index, str2);//修改这个sheet的名字
//标题
sheet.getRow(0).getCell(0).setCellValue(month + "平均水文检测结果表");
List<Map<String, Object>> datas = monthGroup.get(month);
ArrayList<String> titles = Lists.newArrayList(
"GCRQ", "dmName", "SW", "LL", "LS"
);
//先依次写入数据,后面再合并操作
for (int i = 0; i < datas.size(); i++) {
Map<String, Object> data = datas.get(i);
Row row = sheet.createRow(i + 3);//数据的起始行是第三行
for (int j = 0; j < titles.size(); j++) { //依次写入数据
String title = titles.get(j);
Cell cell = row.createCell(j);
InternalExcelUtil.setCellValue(cell, data.get(title), styleSet);
}
}
//todo 后面进行合并单元格操作
index++;
}
//导出
ExcelUtil.exportExcelCustom(fileName, workbook);
我想说我犯了什么错,真是哭笑不得,导出到第二个sheet的时候一直报空指针,我不停的检查都没有找到原因,不知道哪来错了,后来发现是模板里面自动生成的后面两个sheet没有删掉
哭了
什么时候可以出门呀
上一篇: jQuery的显示与隐藏