首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

关于POI合并单元格后加边框有关问题

2012-10-26 
关于POI合并单元格后加边框问题最近由于项目需要用到了POI来生成Excel表格,遇到单元格合并以后怎么加边框,

关于POI合并单元格后加边框问题
最近由于项目需要用到了POI来生成Excel表格,遇到单元格合并以后怎么加边框,老是解决不了,特意上来请教一下
在网上找了一堆,都不行。
自己写了一个笨方法,可以实现列合并加边框,但是行合并就不行了,方法如下:
Java代码


Java代码
/**  
     * 合并单元格加边框  水平  
     * @param sheet  
     * @param region  
     * @param cs  
     */    
    public static void setCellBorder(int start, int end, HSSFRow row,    HSSFCellStyle style) {    
        for(int i=start;i<=end;i++){       
            HSSFCell cell = row.createCell(i);       
            cell.setCellValue("");       
            cell.setCellStyle(style);       
        }    
    }  

/**
     * 合并单元格加边框  水平
     * @param sheet
     * @param region
     * @param cs
     */ 
    public static void setCellBorder(int start, int end, HSSFRow row,    HSSFCellStyle style) { 
        for(int i=start;i<=end;i++){    
            HSSFCell cell = row.createCell(i);    
            cell.setCellValue("");    
            cell.setCellStyle(style);    
        } 
    }  

参数说明:start和并的第二列,end为合并的最后一列,row就为当前行,style样式(里面有设置边框)
例如从0-10列合并: ExcelUtil.setCellBorder(2,10,row,style);   这样可以设置

关于合并行设置也写了一个,但是不行,方法如下:
Java代码


Java代码
/**  
     * 合并单元格加边框  垂直  
     * @param sheet  
     * @param region  
     * @param cs  
     */    
    public static void setCellBorder(int start, int end, int col, HSSFSheet sheet, HSSFCellStyle style) {    
        for(int i=start;i<=end;i++){       
            HSSFRow row  = ExcelUtil.createRow(sheet, start, (short)0);    
            HSSFCell cell = row.createCell(col);       
            cell.setCellValue("");       
            cell.setCellStyle(style);       
        }    
    } 

/**
     * 合并单元格加边框  垂直
     * @param sheet
     * @param region
     * @param cs
     */ 
    public static void setCellBorder(int start, int end, int col, HSSFSheet sheet, HSSFCellStyle style) { 
        for(int i=start;i<=end;i++){    
            HSSFRow row  = ExcelUtil.createRow(sheet, start, (short)0); 
            HSSFCell cell = row.createCell(col);    
            cell.setCellValue("");    
            cell.setCellStyle(style);    
        } 
    }  
  参数说明:start和并的第二行,end为合并的最后一行,col为哪一列,sheet就是当前表格对象,style样式(里面有设置边框)

  下面是调用代码:
Java代码


Java代码
//第二行 制表时间    
        HSSFRow rowCreateTime = ExcelUtil.createRow(sheet, 1, (short)400);    
        String time = new SimpleDateFormat("yyyy年MM月dd日").format(new Date());    
            
        ExcelUtil.createCell(sheet, rowCreateTime, 0, styleTime,     
                new Region(1,(short)0,1,(short)27), "制表时间:"+time,null);    
        //合并后单元格设置边框    
        ExcelUtil.setCellBorder(1, 27, rowCreateTime, styleTime);    
            
        //第三行 目录    
        HSSFRow rowMenu  = ExcelUtil.createRow(sheet, 2, (short)450);    
        HSSFRow rowMenu1 = ExcelUtil.createRow(sheet, 3, (short)450);    
        //单位    
        ExcelUtil.createCell(sheet, rowMenu, 0, style,    
                new Region(2,(short)0,3,(short)0),"单位",4000);    
        ExcelUtil.setCellBorder(3, 3, 0, sheet, style);    
            
        //设备型号    
        ExcelUtil.createCell(sheet, rowMenu, 1, style,    
                new Region(2,(short)1,3,(short)1),"设备型号",2500);    
        ExcelUtil.setCellBorder(3, 3, 1, sheet, style);    
            
        //全年1-12月维修情况    
        ExcelUtil.createCell(sheet, rowMenu, 2, style,    
                new Region(2,(short)2,2,(short)13),"全年1-12月维修情况",null);    
        //合计    
        ExcelUtil.createCell(sheet, rowMenu, 14, style,    
                new Region(2,(short)14,3,(short)14),"合计",1200);    
        ExcelUtil.setCellBorder(3, 3, 14, sheet, style);    
            
        //全年1-12月维护情况    
        ExcelUtil.createCell(sheet, rowMenu, 15, style,    
                new Region(2,(short)15,2,(short)26),"全年1-12月维修情况",null);    
        //合计    
        ExcelUtil.createCell(sheet, rowMenu, 27, style,    
                new Region(2,(short)27,3,(short)27),"合计",1200);    
        ExcelUtil.setCellBorder(3, 3, 27, sheet, style);   

热点排行