环境:
- Apache POI 3.17;
- HSSFSheet;
目的:
对Excel表格中同一列,如果连续的两个或两个以上单元格的内容相同,则对这些单元格进行合并。
实现代码:
/**
* 合并指定Excel sheet页、指定列中连续相同内容的单元格
*
* @param sheet Excel sheet
* @param column 指定列
*/
public static void mergeSpecifiedColumn(HSSFSheet sheet, int column) {
int totalRows = sheet.getLastRowNum(), firstRow = 0, lastRow = 0;
boolean isLastCompareSame = false;//上一次比较是否相同
//这里第一行是表头,从第三行开始判断是否相同
if (totalRows >= 2) {
for (int i = 2; i <= totalRows; i++) {
String lastRowCellContent = sheet.getRow(i - 1).getCell(column).getStringCellValue();
String curRowCellContent = sheet.getRow(i).getCell(column).getStringCellValue();
if (curRowCellContent.equals(lastRowCellContent)) {
if (!isLastCompareSame) {
firstRow = i - 1;
}
lastRow = i;
isLastCompareSame = true;
} else {
isLastCompareSame = false;
if (lastRow > firstRow) {
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, column, column));
}
}
//最后一行时判断是否有需要合并的行
if ((i == totalRows) && (lastRow > firstRow)) {
sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, column, column));
}
}
}
}
方法调用:
//合并单元格
SrItemsUtil.mergeSpecifiedColumn(sheet, 0);
SrItemsUtil.mergeSpecifiedColumn(sheet, 1);
合并前:
合并后:
最新评论
我的是ipv4网络,如何使用直播源啊!
我今天试了,不想啊,我的是新疆昌吉移动的网络。
收不到验证码电报
现在充值29起了