开发者社区> 问答> 正文

POI这种读取合并单元格如何实现!!!!!!!!!!!!!:报错

第一次尝试读取excel,使用的是POI3.9版本

但是读到单元格的话,我已经能判断出这个是不是在合并的单元格内,我想将这个合并的单元格取消合并,将值赋给每个小格子,不知道有没有方法!

上图说明我的意思:


比如上面的图,我要读出来:

你好 hi

你好 hello

你好  nihao

就是这个意思,大神们帮我看看怎么读取呢

展开
收起
kun坤 2020-06-06 23:50:25 663 0
1 条回答
写回答
取消 提交回答
  • 同问,解决了吗######能不能获取合并的格数######先判断是否是合并的单元格,是就调用获取合并单元格的值的方法

            /** * 获取合并单元格的值 * @param sheet * @param row * @param column * @return */ public 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 sheet
     * @param row
     * @param column
     * @return
     */
    public boolean isMergedRegion(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){
    				
    				return true ;
    			}
    		}
    	}
    	
    	return false ;
    }
    
    /**
     * 获取单元格的值
     * @param cell
     * @return
     */
    public 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 "";
    }</pre>
    
    2020-06-06 23:50:31
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载