'Add a column to table. If there are more rows in new column
than there are rows in the current table, the table will
expand with empty rows in the other columns. If too few, the
new column with get new empty rows. All filling rows are added
to the end.
Args:
args (`EvColum` or multiple strings): Either a single EvColumn instance or
a number of data string arguments to be used to create a new column.
header (str, optional): The header text for the column
xpos (int, optional): Index position in table *before* which
to input new column. If not given, column will be added to the end
of the table. Uses Python indexing (so first column is `xpos=0`)
Kwargs:
Other keywords as per `Cell.__init__`.'

def add_column(self, *args, **kwargs):

    options = dict((listitems(self.options) + listitems(kwargs)))
    xpos = kwargs.get('xpos', None)
    column = EvColumn(*args, **options)
    wtable = self.ncols
    htable = self.nrows
    excess = (len(column) - htable)
    if (excess > 0):
        for col in self.table:
            empty_rows = ['' for _ in range(excess)]
            col.add_rows(*empty_rows, **options)
        self.nrows += excess
    elif (excess < 0):
        empty_rows = ['' for _ in range(abs(excess))]
        column.add_rows(*empty_rows, **options)
        self.nrows -= excess
    header = kwargs.get('header', None)
    if header:
        column.add_rows(unicode(header), ypos=0, **options)
        self.header = True
    elif self.header:
        column.add_rows('', ypos=0, **options)
    if ((xpos is None) or (xpos > (wtable - 1))):
        self.table.append(column)
    else:
        xpos = min((wtable - 1), max(0, int(xpos)))
        self.table.insert(xpos, column)
    self.ncols += 1
