import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
public class ExcelHelper {
/**合并单元格,合并相同的列
*
* @param sheet
* @param startRow 开始行
* @param mergeRow 需要合并的列
* @param i 用于计数 ,和startRow值相同
*/
public void merge(Sheet sheet, int startRow, int mergeRow, int i){
String startText = sheet.getRow(startRow).getCell(mergeRow).toString();
while(sheet.getRow(i)!=null&&sheet.getRow(i).getCell(mergeRow)!=null){
if(sheet.getRow(i).getCell(mergeRow)!=null
&&!sheet.getRow(i).getCell(mergeRow).toString().equals(startText)){
//合并单元格
sheet.addMergedRegion(new CellRangeAddress(startRow,i-1,mergeRow,mergeRow));
startText = sheet.getRow(i).getCell(mergeRow).getStringCellValue();
startRow = i;
}
i++;
}
//尾部处理
if(startRow!=i){
sheet.addMergedRegion(new CellRangeAddress(startRow,i-1,mergeRow,mergeRow));
}
}
/**合并单元格,存在父级对二级列合并的情况
*
* @param sheet
* @param startRow 开始行
* @param mergeRow 需要合并的列
* @param mergeParentRow 需要合并的列的父级
* @param i 用于计数 ,和startRow值相同
*/
public void mergeByParent(Sheet sheet, int startRow, int mergeRow,int mergeParentRow,int i){
String startText = sheet.getRow(startRow).getCell(mergeRow).toString();
String startParentText = sheet.getRow(startRow).getCell(mergeParentRow).toString();
while(sheet.getRow(i)!=null&&sheet.getRow(i).getCell(mergeRow)!=null){
if(sheet.getRow(i).getCell(mergeRow)==null
||!sheet.getRow(i).getCell(mergeRow).toString().equals(startText)
||!sheet.getRow(i).getCell(mergeParentRow).toString().equals(startParentText)){
if(i!=startRow){
//合并单元格
sheet.addMergedRegion(new CellRangeAddress(startRow,i-1,mergeRow,mergeRow));
}
startText = sheet.getRow(i).getCell(mergeRow).getStringCellValue();
startParentText = sheet.getRow(i).getCell(mergeParentRow).getStringCellValue();
startRow = i;
}
i++;
}
//尾部处理
if(startRow!=i){
sheet.addMergedRegion(new CellRangeAddress(startRow,i-1,mergeRow,mergeRow));
}
}
}
java poi excel合并单元格 相同的列以及在有父级约束条件下合并二级列
最新推荐文章于 2024-06-21 09:40:38 发布
关键词由CSDN通过智能技术生成