poi导出excel 合并单元格 边框问题

本文解决使用Apache POI在Excel中合并单元格后边框消失的问题,通过正确创建行对象并利用RegionUtil方法为合并区域添加边框,确保表格格式的完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

poi导出excel 纵向合并单元格后,边框消失的问题。

如上图,原本是合并了A/B/C/D/E列的第2、3行。但边框却有了。

网上搜索了几篇文章,最后是以下网址中得到答案:

https://zhouchaofei2010.iteye.com/blog/1070857

具体解决办法记录如下:

//合并A~J列第1、2行:
            CellRangeAddress region1 = new CellRangeAddress(1, 2, 0, 0);
            sheet.addMergedRegion(region1);
            setBorderStyle(HSSFCellStyle.BORDER_THIN, region1, sheet, wb);   //给合并过的单元格加边框

            。。。。。。后面代码类似,省略。

//很关键:

//在sheet里创建第二行  
            //HSSFRow row2 =sheet.createRow(1);  //不能这样直接新增,否则直接createRow会覆盖先前合并时定义的边框样式。
            HSSFRow row2 = sheet.getRow(1);
            if(row2==null)
            {
                row2 = sheet.createRow(1);
            }
            //在sheet里创建第3行  
            //HSSFRow row3 = sheet.createRow(2);
            HSSFRow row3 = sheet.getRow(2);
            if(row3==null)
            {
                row3 = sheet.createRow(2);
            }

//用poi自带的工具类来处理合并后的边框
  public void setBorderStyle(int border,CellRangeAddress region,HSSFSheet sheet,HSSFWorkbook wb){
        RegionUtil.setBorderBottom(border,region, sheet, wb);  
        RegionUtil.setBorderLeft(border,region, sheet, wb);  
        RegionUtil.setBorderRight(border,region, sheet, wb);  
        RegionUtil.setBorderTop(border,region, sheet, wb);  
    }
    
  /*
  //也可用以下方法
   public void setBorderStyle(int border,CellRangeAddress region,HSSFSheet sheet,HSSFWorkbook wb){
        HSSFCellStyle cs = wb.createCellStyle(); // 样式对象 
        cs.setBorderBottom((short) border);  
        cs.setBorderTop((short) border);  
        cs.setBorderLeft((short) border);  
        cs.setBorderRight((short) border);  
       
        setRegionStyle( cs, region, sheet);  
    } 
    
     private static void setRegionStyle(HSSFCellStyle cs, CellRangeAddress region, HSSFSheet sheet){  
        for(int i=region.getFirstRow();i<=region.getLastRow();i++){  
            HSSFRow row=sheet.getRow(i);  
            if(row==null) row=sheet.createRow(i);  
            for(int j=region.getFirstColumn();j<=region.getLastColumn();j++){  
                HSSFCell cell=row.getCell(j);  
                if( cell==null){  
                    cell=row.createCell(j);  
                    cell.setCellValue("");  
                }  
                 cell.setCellStyle(cs);  
            }  
        }  
    }  
    */

 

 

 

在使用POI导出Excel合并单元后,需要给合并后的单元边框,可以通过设置单元样式CellStyle的边框样式来实现。 具体实现步骤如下: 1. 创建单元样式CellStyle ``` CellStyle style = workbook.createCellStyle(); ``` 2. 设置边框样式 ``` style.setBorderTop(BorderStyle.THIN); style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); ``` 上述代码中,设置了上、下、左、右四个边框的样式为THIN,即细边框。如果需要设置其他边框样式,可以使用BorderStyle枚举类型中的其他值。 3. 设置合并单元的样式 ``` sheet.addMergedRegion(new CellRangeAddress(0, 3, 0, 3)); // 合并单元 Row row = sheet.getRow(0); // 获取第一行 Cell cell = row.getCell(0); // 获取第一个单元 cell.setCellStyle(style); // 设置样式 ``` 上述代码中,使用addMergedRegion方法合并了第1行到第4行,第1列到第4列的单元,然后获取第1行第1列的单元,设置样式为上一步创建的样式。 4. 导出Excel 最后将Workbook对象写入到输出流即可。 完整代码示例: ```java Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); // 创建单元样式 CellStyle style = workbook.createCellStyle(); style.setBorderTop(BorderStyle.THIN); style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); // 合并单元并设置样式 sheet.addMergedRegion(new CellRangeAddress(0, 3, 0, 3)); Row row = sheet.getRow(0); Cell cell = row.getCell(0); cell.setCellStyle(style); // 导出Excel OutputStream outputStream = new FileOutputStream("test.xlsx"); workbook.write(outputStream); outputStream.close(); workbook.close(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值