SXSSFWorkbook -Attempting to write a row[1] in the range [0,451] that is already...

使用SXSSFWorkbook 向excel中写数据时,报错如标题。

我的场景:将Map<String, List<String>>中存储的数据写入不同excel文件中。

异常原因:只创建了一个SXSSFWorkbook对象,这样在写第2个excel时数据就已经存在了。

解决方法:将创建SXSSFWorkbook对象放入循环体中

        /**
         * write to excel
         */
        System.out.println("start write to excel...");

        // 问题所在
        /*SXSSFWorkbook wb = new SXSSFWorkbook(rowSize);
        SXSSFSheet sheet1 = wb.createSheet("sheet1");
        SXSSFRow headRow = sheet1.createRow(0);
        SXSSFCell headRowCell = headRow.createCell(0);
        headRowCell.setCellValue("data");*/

        int rowSize = 100;
        // 循环写入数据
        map.forEach((key, value) -> {
            try {
                // 创建表头
                SXSSFWorkbook wb = new SXSSFWorkbook(rowSize);

                // 单元格样式(垂直居中)
                XSSFCellStyle cellStyle = (XSSFCellStyle) wb.createCellStyle();
                //水平居中
                cellStyle.setAlignment(HorizontalAlignment.CENTER);
                //垂直居中
                cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
                //设置为文本格式
                cellStyle.setDataFormat(BuiltinFormats.getBuiltinFormat("TEXT"));

                SXSSFSheet sheet1 = wb.createSheet("sheet1");
                SXSSFRow headRow = sheet1.createRow(0);
                SXSSFCell headRowCell = headRow.createCell(0);
                cell.setCellStyle(style);
                headRowCell.setCellValue("data");
                // 写入数据
                int jishu = 0;
                for (String s : value) {
                    SXSSFRow row = sheet1.createRow(jishu + 1);
                    SXSSFCell cell = row.createCell(0, CellType.STRING);
                    cell.setCellStyle(style);
                    cell.setCellValue(s);
                    jishu++;

                    if (jishu % rowSize == 0) {
                        sheet1.flushRows();
                    }
                }

                key = URLDecoder.decode(key, "UTF-8");
                FileOutputStream fileOutputStream = new FileOutputStream(outpath + key + ".xlsx");

                wb.write(fileOutputStream);
                // 关闭流
                fileOutputStream.close();

            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        });

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值