POI shiftRows后合并单元格丢失的解决办法

来源:互联网 发布:淘宝怎么注册卖家 编辑:程序博客网 时间:2024/06/04 18:00

最近在写模板导出,插入行要使用shiftRows,结果移动的行所有的合并格式都丢失了。在google了一下也没找到解决办法,stackoverflow也没解决的办法,说是poi的一个bug。
自己想了一个解决办法,供大家参考:

InputStream template = TestExport.class.getResourceAsStream("/template/offering_list.xlsx");        Workbook book = new XSSFWorkbook(template);        Sheet sheetAt = book.getSheetAt(0);        System.out.println(sheetAt.getLastRowNum());        Row row = sheetAt.getRow(7);        //先获取原始的合并单元格address集合        List<CellRangeAddress> originMerged = sheetAt.getMergedRegions();        //移动        sheetAt.shiftRows(8, sheetAt.getLastRowNum(), 1, true, true);        Row create = sheetAt.createRow(8);        //关键逻辑再这个for循环        for(CellRangeAddress cellRangeAddress : originMerged) {        //这里的8是插入行的index,表示这行之后才重新合并            if(cellRangeAddress.getFirstRow() > 8) {            //你插入了几行就加几,我这里插入了一行,加1                int firstRow = cellRangeAddress.getFirstRow() + 1;                CellRangeAddress newCellRangeAddress = new CellRangeAddress(firstRow, (firstRow + (cellRangeAddress                        .getLastRow() - cellRangeAddress.getFirstRow())), cellRangeAddress.getFirstColumn(),                        cellRangeAddress.getLastColumn());                sheetAt.addMergedRegion(newCellRangeAddress);            }        }

测试通过

原创粉丝点击