Excel导出多sheet

今天做了一个功能,要根据年份导出月平均水文监测结果

不同月份用不同的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没有删掉

哭了

什么时候可以出门呀

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值