poi打印合并,上代码

来源:互联网 发布:xampp配置mysql端口 编辑:程序博客网 时间:2024/05/17 04:40

/**  
     * 合并单元格  
     * @param sheet 要合并单元格的excel 的sheet
     * @param cellLine  要合并的列  
     * @param startRow  要合并列的开始行  
     * @param endRow    要合并列的结束行  
     */  

private static void addMergedRegion_Poi(HSSFSheet sheet, int cellLine, int startRow, int endRow,HSSFWorkbook workBook){   
           
    HSSFCellStyle style = workBook.createCellStyle(); // 样式对象    
    
        style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直    
        style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平    
        int strRow_1=startRow;
        String s_will =null;
        double num_will=0.0;
        switch(sheet.getRow(startRow).getCell(cellLine).getCellType()){
            case HSSFCell.CELL_TYPE_STRING:
                 s_will = sheet.getRow(strRow_1).getCell(cellLine).getStringCellValue();
                 break;
            case HSSFCell.CELL_TYPE_NUMERIC:
                num_will=sheet.getRow(strRow_1).getCell(cellLine).getNumericCellValue();
                break;
        }
        //获取第一行的数据,以便后面进行比较
                int count = 0;
                boolean flag = false;
                int count1 = 0;
                boolean flag1 = false;
                int nums_count=0;
                for (int i = startRow; i <= endRow; i++) {  
                    switch(sheet.getRow(startRow).getCell(cellLine).getCellType()){
                    case HSSFCell.CELL_TYPE_STRING:
                        String  s_current=sheet.getRow(i!=endRow?i+1:i).getCell(cellLine).getStringCellValue();
                        if(i==endRow){
                            s_current="";
                        }
                        if(s_will.equals(s_current))
                        {
                            s_will = s_current;
                             
                            startRow++;
                            count++;
                        }else{
                            sheet.addMergedRegion(new CellRangeAddress(startRow-count,startRow,cellLine,cellLine));
                            HSSFRow row = sheet.getRow(startRow-count%2==0?startRow-count+1:startRow-count);
                            String cellValueTemp = sheet.getRow(startRow-count%2==0?startRow-count+1:startRow-count).getCell(cellLine).getStringCellValue();
                            HSSFCell cell = row.createCell(cellLine);
                            cell.setCellValue(cellValueTemp); // 跨单元格显示的数据    
                                    cell.setCellStyle(style); // 样式    
                                    if(i!=endRow-1){
                                        flag = true;
                                    }
                            s_will = s_current;
                            startRow++;
                            count=0;
                        }
                //由于上面循环中合并的单元放在有下一次相同单元格的时候做的,所以最后如果几行有相同单元格则要运行下面的合并单元格。
//                        if(i==endRow-1&&count>0)
//                        {
//                            sheet.addMergedRegion(new CellRangeAddress(endRow-count,endRow,cellLine,cellLine));   
//                            String cellValueTemp = sheet.getRow(endRow-count).getCell(cellLine).getStringCellValue();
//                            HSSFRow row = sheet.getRow(endRow-count);
//                            HSSFCell cell = row.createCell(cellLine);
//                            cell.setCellValue(cellValueTemp); // 跨单元格显示的数据    
//                            cell.setCellStyle(style); // 样式    
//                        }
                        break;
                    case  HSSFCell.CELL_TYPE_NUMERIC:
                       double  s_current1= sheet.getRow(i!=endRow?i+1:i).getCell(cellLine).getNumericCellValue();
                       if(i==endRow){
                           s_current="";
                           }
                           if(num_will==s_current1)
                           {
                               num_will = s_current1;
                               count1++;  
                                if(flag1)
                               {
//                                   sheet.addMergedRegion(new CellRangeAddress(startRow-count,startRow,cellLine,cellLine));
//                                   HSSFRow row = sheet.getRow(startRow);
//                                   String cellValueTemp = sheet.getRow(startRow).getCell(cellLine).getStringCellValue();
//                                   HSSFCell cell = row.createCell(cellLine);
//                                   cell.setCellValue(cellValueTemp); // 跨单元格显示的数据    
//                                           cell.setCellStyle(style); // 样式    
                                   count1 = 0;
                                   flag1 = false;
                               }
                               startRow++;
                               count1++;      
                           }else{
                               sheet.addMergedRegion(new CellRangeAddress(startRow-count1,startRow,cellLine,cellLine));
                               HSSFRow row = sheet.getRow(startRow-count1%2==0?startRow-count1+1:startRow-count1);
                               String cellValueTemp = sheet.getRow(startRow-count1%2==0?startRow-count1+1:startRow-count1).getCell(cellLine).getStringCellValue();
                               HSSFCell cell = row.createCell(cellLine);
                               cell.setCellValue(cellValueTemp); // 跨单元格显示的数据    
                                       cell.setCellStyle(style); // 样式    
                                       if(i!=endRow-1){
                                           flag1 = true;
                                       }
                                    num_will = s_current1;
                               startRow++;
                           }
                       break;
                    }
               
             }
    }



1 0
原创粉丝点击