'Set the width, and other properties of a single column or a
range of columns.
Args:
firstcol:    First column (zero-indexed).
lastcol:     Last column (zero-indexed). Can be same as firstcol.
width:       Column width. (optional).
cell_format: Column cell_format. (optional).
options:     Dict of options such as hidden and level.
Returns:
0:  Success.
-1: Column number is out of worksheet bounds.'

@convert_column_args
def set_column(self, firstcol, lastcol, width=None, cell_format=None, options=None):

    if (options is None):
        options = {}
    if (firstcol > lastcol):
        (firstcol, lastcol) = (lastcol, firstcol)
    ignore_row = True
    hidden = options.get('hidden', False)
    collapsed = options.get('collapsed', False)
    level = options.get('level', 0)
    if (cell_format or (width and hidden)):
        ignore_col = False
    else:
        ignore_col = True
    if self._check_dimensions(0, lastcol, ignore_row, ignore_col):
        return (-1)
    if self._check_dimensions(0, firstcol, ignore_row, ignore_col):
        return (-1)
    if (level < 0):
        level = 0
    if (level > 7):
        level = 7
    if (level > self.outline_col_level):
        self.outline_col_level = level
    self.colinfo[('%05d' % firstcol)] = [firstcol, lastcol, width, cell_format, hidden, level, collapsed]
    self.col_size_changed = True
    if hidden:
        width = 0
    for col in range(firstcol, (lastcol + 1)):
        self.col_sizes[col] = width
        if cell_format:
            self.col_formats[col] = cell_format
    return 0
