code: private void processSavingNestedMergedRecord(final Sheet sheet, final int mergedSize,
              final List<CellPosition> valueCellPositions) {
  
          if(mergedSize <= 1) {
              return;
          }
  
          // ネストした場合、上のセルのスタイルをコピーして、結合する
          for(CellPosition position : valueCellPositions) {
              Cell valueCell = POIUtils.getCell(sheet, position);
              if(valueCell == null) {
                  continue;
              }
  
              final CellStyle style = valueCell.getCellStyle();
  
              // 結合するセルに対して、上のセルのスタイルをコピーする。
              // 行を挿入するときなどに必要になるため、スタイルを設定する。
              for(int i=1; i < mergedSize; i++) {
                  Cell mergedCell = POIUtils.getCell(sheet, position.getColumn(), position.getRow() + i);
                  mergedCell.setCellStyle(style);
                  mergedCell.setCellType(CellType.BLANK);
              }
  
              final CellRangeAddress range = new CellRangeAddress(position.getRow(), position.getRow()+ mergedSize-1,
                      position.getColumn(), position.getColumn());
  
              // 既に結合済みのセルがある場合、外す。
              for(int rowIdx=range.getFirstRow(); rowIdx <= range.getLastRow(); rowIdx++) {
                  CellRangeAddress r = POIUtils.getMergedRegion(sheet, rowIdx, position.getColumn());
                  if(r != null) {
                      POIUtils.removeMergedRange(sheet, r);
                  }
              }
  
              sheet.addMergedRegion(range);
          }
  
      }
docs: ネストしたレコードの親のセルを結合する
  @param sheet シート
  @param mergedSize 結合するセルのサイズ
  @param valueCellPositions 結合する開始位置のセルのアドレス