您的位置:首页 > 编程语言 > Java开发

poi合并单元格

2016-01-24 19:01 411 查看
注:我这里合并的是列的相同单元格,图片效果如下:
 POI合并单元格的方法是addMergedRegion();

/**  
     * 合并单元格  
     * @param sheet 要合并单元格的excel 的sheet
     * @param cellLine  要合并的列  
     * @param startRow  要合并列的开始行  
     * @param endRow    要合并列的结束行  
     */  
    private static void addMergedRegion(HSSFSheet sheet, int cellLine, int startRow, int endRow,HSSFWorkbook workBook){   
           
     HSSFCellStyle style = workBook.createCellStyle(); // 样式对象    
     
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直    
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平    
        //获取第一行的数据,以便后面进行比较    
        String s_will = sheet.getRow(startRow).getCell(cellLine).getStringCellValue();   
     
        int count = 0;
        boolean flag = false;
        for (int i = 1; i <= endRow; i++) {   
         String s_current = sheet.getRow(i).getCell(0).getStringCellValue(); 
         if(s_will.equals(s_current))
         {
         s_will = s_current;
         if(flag)
         {
         sheet.addMergedRegion(new CellRangeAddress(startRow-count,startRow,cellLine,cellLine));
         HSSFRow row = sheet.getRow(startRow-count);
         String cellValueTemp = sheet.getRow(startRow-count).getCell(0).getStringCellValue(); 
         HSSFCell cell = row.createCell(0);
         cell.setCellValue(cellValueTemp); // 跨单元格显示的数据    
                
cell.setCellStyle(style); // 样式    
         count = 0;
         flag = false;
         }
         startRow=i;
         count++;        

         }else{
         flag = true;
         s_will = s_current;
         }
//由于上面循环中合并的单元放在有下一次相同单元格的时候做的,所以最后如果几行有相同单元格则要运行下面的合并单元格。
         if(i==endRow&&count>0)
         {
         sheet.addMergedRegion(new CellRangeAddress(endRow-count,endRow,cellLine,cellLine));   
         String cellValueTemp = sheet.getRow(startRow-count).getCell(0).getStringCellValue(); 
         HSSFRow row = sheet.getRow(startRow-count);
     HSSFCell cell = row.createCell(0);
     cell.setCellValue(cellValueTemp); // 跨单元格显示的数据    
                cell.setCellStyle(style); // 样式    
         }
        }
    }
    

你只要在导出excel的方法里调用:  addMergedRegion(sheet, 0, 0, sheet.getLastRowNum(),workBook);就是合并第一列的所有相同单元格。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poi java