欢迎光临
一个有态度、有温度的分享型博客

Java使用Apache POI合并Excel连续相同内容的单元格

环境:

  • 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);

合并前:

合并后:

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址