EXCEL导入关于合并单元格的处理类

   项目中遇到了关于Sheet页中出现合并单元格的情况,一下代码为解决思路,请参考,谢谢。




/**
 * TODO fill class info here
 *
 * @author 
 * @date 2016-03-23 17:43:18
 */

package com.hkrsoft.ysglpt.comm;

import java.util.Arrays;
import java.util.List;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;


public class ReadMergeRegionExcel {
	
	
	
	
	
	 /**  
	    * 读取excel文件  
	    * @param  wb   
	    * @param sheetIndex sheet页下标:从0开始  
	    * @param startReadLine 开始读取的行:从0开始  
	    * @param tailLine 去除最后读取的行  
	    */  
	    public static void readExcelSheet( Sheet sheet, int startReadLine) {  
	        
	        Row row = null;  
	          
	        for(int i=startReadLine; i<=sheet.getLastRowNum(); i++) {  
	            
	            row = sheet.getRow(i);
	            for(Cell c : row) {  
	                c.setCellType(Cell.CELL_TYPE_STRING);
	                boolean isMerge = isMergedRegion(sheet, i, c.getColumnIndex());  
	                //判断是否具有合并单元格  
	                if(isMerge) {  
	                    String rs = getMergedRegionValue(sheet, row.getRowNum(), c.getColumnIndex()); 
	                    System.out.print(rs + "  ");  
	                }else {  
	                    System.out.print(c.getRichStringCellValue()+"  ");  
	                }  
	            }  
	            System.out.println();  
	              
	        }  
	      
	    }  
	  
	/**   
	    * 获取合并单元格的值   
	    * @param sheet   
	    * @param row   
	    * @param column   
	    * @return   
	    */    
	    public static String getMergedRegionValue(Sheet sheet ,int row , int column){ 
	        
	        int sheetMergeCount = sheet.getNumMergedRegions();    
	            
	        for(int i = 0 ; i < sheetMergeCount ; i++){    
	            CellRangeAddress ca = sheet.getMergedRegion(i);    
	            int firstColumn = ca.getFirstColumn();    
	            int lastColumn = ca.getLastColumn();    
	            int firstRow = ca.getFirstRow();    
	            int lastRow = ca.getLastRow();    
	                
	            if(row >= firstRow && row <= lastRow){    
	                    
	                if(column >= firstColumn && column <= lastColumn){    
	                    Row fRow = sheet.getRow(firstRow);    
	                    Cell fCell = fRow.getCell(firstColumn);    
	                    return getCellValue(fCell) ;    
	                }    
	            }    
	        }    
	            
	        return null ;    
	    }    
	    
		    
		 /**   
		 * 获取单元格的值   
		 * @param cell   
		 * @return   
		 */
		public static String getCellValue(Cell cell) {
	
			if (cell == null)
				return "";
	
			if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
	
				return cell.getStringCellValue();
	
			} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
	
				return String.valueOf(cell.getBooleanCellValue());
	
			} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
	
				return cell.getCellFormula();
	
			} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
	
				return String.valueOf(cell.getNumericCellValue());
	
			}
			return "";
		}
		
		
		
		
	/**  
	    * 判断合并了行  
	    * @param sheet  
	    * @param row  
	    * @param column  
	    * @return  
	    */  
	    @SuppressWarnings("unused")
		public static boolean isMergedRow(Sheet sheet,int row ,int column) {  
	      
	      int sheetMergeCount = sheet.getNumMergedRegions();  
	      for (int i = 0; i < sheetMergeCount; i++) {  
	        CellRangeAddress range = sheet.getMergedRegion(i);  
	        int firstColumn = range.getFirstColumn();  
	        int lastColumn = range.getLastColumn();  
	        int firstRow = range.getFirstRow();  
	        int lastRow = range.getLastRow();  
	        if(row == firstRow && row == lastRow){  
	            if(column >= firstColumn && column <= lastColumn){  
	                return true;  
	            }  
	        }  
	      }  
	      return false;  
	    }  
		
		 /**
			 * 判断指定的单元格是否是合并单元格
			 * 
			 * @param sheet
			 * @param row
			 *            行下标
			 * @param column
			 *            列下标
			 * @return
			 */
		@SuppressWarnings("unused")
		public static  boolean isMergedRegion(Sheet sheet, int row, int column) {
	
			int sheetMergeCount = sheet.getNumMergedRegions();
			for (int i = 0; i < sheetMergeCount; i++) {
	
				CellRangeAddress range = sheet.getMergedRegion(i);
				int firstColumn = range.getFirstColumn();
				int lastColumn = range.getLastColumn();
				int firstRow = range.getFirstRow();
				int lastRow = range.getLastRow();
				if (row >= firstRow && row <= lastRow) {
					if (column >= firstColumn && column <= lastColumn) {
						return true;
					}
				}
			}
			return false;
		}  
		
		  /**  
		    * 判断sheet页中是否含有合并单元格   
		    * @param sheet   
		    * @return  
		    */  
		public boolean hasMerged(Sheet sheet) {  
		            return sheet.getNumMergedRegions() > 0 ? true : false;  
		 }  
		
		 /**
			 * 合并单元格
			 * 
			 * @param sheet
			 * @param firstRow
			 *            开始行
			 * @param lastRow
			 *            结束行
			 * @param firstCol
			 *            开始列
			 * @param lastCol
			 *            结束列
			 */
		@SuppressWarnings("unused")
		public void mergeRegion(Sheet sheet, int firstRow, int lastRow,
				int firstCol, int lastCol) {
			sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol,
					lastCol));
		}  
		
		
		/**
	 *  判断某个字符串是否存在于数组中
	 *  @param stringArray 原数组
	 *  @param source 查找的字符串
	 *  @return 是否找到
	 */
	public static boolean contains(String[] stringArray, String source) {
		// 转换为list
		List tempList = Arrays.asList(stringArray);

		// 利用list的包含方法,进行判断
		if (tempList.contains(source)) {
			return true;
		} else {
			return false;
		}
	} 

}



你可能感兴趣的:(java)