'Translate an A1-style range reference to the destination cell.
`rdelta`: the row offset to add to the range
`cdelta`: the column offset to add to the range
`range_str`: an A1-style reference to a range. Potentially includes
the worksheet reference. Could also be a named range.'

@classmethod
def translate_range(cls, range_str, rdelta, cdelta):

    (ws_part, range_str) = cls.strip_ws_name(range_str)
    match = cls.ROW_RANGE_RE.match(range_str)
    if (match is not None):
        return (((ws_part + cls.translate_row(match.group(1), rdelta)) + ':') + cls.translate_row(match.group(2), rdelta))
    match = cls.COL_RANGE_RE.match(range_str)
    if (match is not None):
        return (((ws_part + cls.translate_col(match.group(1), cdelta)) + ':') + cls.translate_col(match.group(2), cdelta))
    if (':' in range_str):
        return (ws_part + ':'.join((cls.translate_range(piece, rdelta, cdelta) for piece in range_str.split(':'))))
    match = cls.CELL_REF_RE.match(range_str)
    if (match is None):
        return range_str
    return ((ws_part + cls.translate_col(match.group(1), cdelta)) + cls.translate_row(match.group(2), rdelta))
