欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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没有删掉

哭了

什么时候可以出门呀

 

相关标签: 导出多sheet java