'Set merge on a cell range.  Range is a cell range (e.g. A1:E1)'

def merge_cells(self, range_string=None, start_row=None, start_column=None, end_row=None, end_column=None):

    if (not range_string):
        if ((start_row is None) or (start_column is None) or (end_row is None) or (end_column is None)):
            msg = "You    have    to    provide    a    value    either    for    'coordinate'    or    for    'start_row',    'start_column',    'end_row'    *and*    'end_column'"
            raise InsufficientCoordinatesException(msg)
        else:
            range_string = ('%s%s:%s%s' % (get_column_letter(start_column), start_row, get_column_letter(end_column), end_row))
    elif (':' not in range_string):
        if COORD_RE.match(range_string):
            return
        msg = 'Range    must    be    a    cell    range    (e.g.    A1:E1)'
        raise InsufficientCoordinatesException(msg)
    else:
        range_string = range_string.replace('$', '')
    if (range_string not in self._merged_cells):
        self._merged_cells.append(range_string)
    cells = rows_from_range(range_string)
    for c in islice(chain.from_iterable(cells), 1, None):
        if (c in self._cells):
            del self._cells[c]
        if (c in self.hyperlinks):
            del self._hyperlinks[c]
