poi动态合并内容相同的单元格

首先将内容相同的单元格设置为空:

      

if(hssfSheet.getLastRowNum()>3){//获取最后一行行标,比行数小  满足合并的条件,3是数据行的开始,0 1 2行为表头
				HSSFRow row_1 = hssfSheet.getRow(3);
				HSSFCell cell_0 = row_1.getCell(0);
				HSSFCell cell_1 = row_1.getCell(1);
				HSSFCell cell_2 = row_1.getCell(2);
				HSSFCell cell_3 = row_1.getCell(3);
				
				String leader_name = cell_0.getStringCellValue();
				String vice_leader_name = cell_1.getStringCellValue();
				String group1_name = cell_2.getStringCellValue();
				String group2_name = cell_3.getStringCellValue();
				
				for(int i=4;i<=hssfSheet.getLastRowNum();i++){//除第一个外,循环将内容相同的单元格设为"",这里体现出为什么原数据要有序
					HSSFRow rows = hssfSheet.getRow(i);
					//此处表示对4个单元格进行内容相同合并处理
					HSSFCell cells_0 = rows.getCell(0);
					HSSFCell cells_1 = rows.getCell(1);
					HSSFCell cells_2 = rows.getCell(2);
					HSSFCell cells_3 = rows.getCell(3);
					
					if(leader_name.equals(cells_0.getStringCellValue())){
						cells_0.setCellValue("");
					}else{
						leader_name = cells_0.getStringCellValue();
					}
					
					if(vice_leader_name.equals(cells_1.getStringCellValue())){
						cells_1.setCellValue("");
					}else{
						vice_leader_name = cells_1.getStringCellValue();
					}
					
					if(group1_name.equals(cells_2.getStringCellValue())){
						cells_2.setCellValue("");
					}else{
						group1_name = cells_2.getStringCellValue();
					}
					
					if(group2_name.equals(cells_3.getStringCellValue())){
						cells_3.setCellValue("");
					}else{
						group2_name = cells_3.getStringCellValue();
					}			
				}		
			}
			

下面将为空的单元格合并:

int sk;
			if(hssfSheet.getLastRowNum()>3){//将为空的单元格与之前不为空的合并	
				sk=3;				
				for(int i=4;i<=hssfSheet.getLastRowNum();i++){
					HSSFRow rows = hssfSheet.getRow(i);
					HSSFCell cell_0 = rows.getCell(0);
					if(cell_0.getStringCellValue() == ""){
						if(i==hssfSheet.getLastRowNum()){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i, 0, 0));
						}										
					}else{
						if(sk != i-1){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i-1, 0, 0));//起始行号,终止行号, 起始列号,终止列号
						}
						sk =i;
					}
				}
				sk=3;
				for(int i=4;i<=hssfSheet.getLastRowNum();i++){					
					HSSFRow rows = hssfSheet.getRow(i);
					HSSFCell cell_1 = rows.getCell(1);
					if(cell_1.getStringCellValue() == ""){
						if(i==hssfSheet.getLastRowNum()){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i, 1, 1));
						}			
					}else{						
						if(sk != i-1){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i-1, 1, 1));//起始行号,终止行号, 起始列号,终止列号
						}						
						sk =i;
					}
				}
				sk=3;
				for(int i=4;i<=hssfSheet.getLastRowNum();i++){
					HSSFRow rows = hssfSheet.getRow(i);
					HSSFCell cell_2 = rows.getCell(2);
					if(cell_2.getStringCellValue() == ""){
						if(i==hssfSheet.getLastRowNum()){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i, 2, 2));
						}					
					}else{						
						if(sk != i-1){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i-1, 2, 2));//起始行号,终止行号, 起始列号,终止列号
						}						
						sk =i;
					}
				}
				sk=3;
				for(int i=4;i<=hssfSheet.getLastRowNum();i++){
					HSSFRow rows = hssfSheet.getRow(i);
					HSSFCell cell_3 = rows.getCell(3);
					if(cell_3.getStringCellValue() == ""){
						if(i==hssfSheet.getLastRowNum()){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i, 3, 3));
						}					
					}else{					
						if(sk != i-1){
							hssfSheet.addMergedRegion(new CellRangeAddress(sk, i-1, 3, 3));//起始行号,终止行号, 起始列号,终止列号
						}					
						sk =i;
					}
				}
			}

效果如下:



  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值