def column name, options = {}

      if name.is_a?(Numeric) || name.is_a?(String)
        @columns << Constant.wrap(name)
      elsif name.is_a?(ValueExtractor)
        @columns << name
        name.column = COLUMNS[@assigned_column_index]
      elsif name == Empty.instance
        @columns << nil
      elsif @definitions.variable?(name)
        @definitions.variable(name).column = COLUMNS[@assigned_column_index]
        @columns << @definitions.variable(name)
      elsif @definitions.formula?(name)
        @definitions.formula(name).column = COLUMNS[@assigned_column_index]
        @columns << @definitions.formula(name)
      else
        raise "Unknown function or variable '#{name}'"
      end

      raise ArgumentError, "Options should be a Hash" unless options.is_a?(Hash)

      @columns_by_id[options[:id]] = @assigned_column_index if options[:id]
      
      title = nil
      title = options[:title] if options[:title]

      style = nil
      style = Style.new(options[:style]) if options[:style]

      type = nil
      type = options[:type] if options[:type]

      column_style = nil
      column_style = options[:column_style] if options[:column_style]

      title_style = nil
      title_style = options[:title_style] if options[:title_style]

      @column_titles << title
      @has_titles = @has_titles || !title.nil?

      @cell_styles << style
      @column_types << type
      @title_styles << title_style
      @column_styles << column_style

      @assigned_column_index += 1

    end
def column name, options = {}

      if name.is_a?(Numeric) || name.is_a?(String)
        @columns << Constant.wrap(name)
      elsif name.is_a?(ValueExtractor)
        @columns << name
        name.column = COLUMNS[@assigned_column_index]
      elsif name == Empty.instance
        @columns << nil
      elsif @definitions.variable?(name)
        @definitions.variable(name).column = COLUMNS[@assigned_column_index]
        @columns << @definitions.variable(name)
      elsif @definitions.formula?(name)
        @definitions.formula(name).column = COLUMNS[@assigned_column_index]
        @columns << @definitions.formula(name)
      else
        raise "Unknown function or variable '#{name}'"
      end

      raise ArgumentError, "Options should be a Hash" unless options.is_a?(Hash)

      @columns_by_id[options[:id]] = @assigned_column_index if options[:id]
      
      title = nil
      title = options[:title] if options[:title]

      style = nil
      style = Style.new(options[:style]) if options[:style]

      type = nil
      type = options[:type] if options[:type]

      column_style = nil
      column_style = options[:column_style] if options[:column_style]

      title_style = nil
      title_style = options[:title_style] if options[:title_style]

      @column_titles << title
      @has_titles = @has_titles || !title.nil?

      @cell_styles << style
      @column_types << type
      @title_styles << title_style
      @column_styles << column_style

      @assigned_column_index += 1

    end
name is a numeric or string constant, a variable name, a ValueExtractor, a formula name, empty (skip)
 options is a has than can contain next keys:
    style        => a dynamic (or computed) style for the cell
    column_style => style name for the column
    title_style  => style name for the column title (if row 0 contains the title)
    type         => type for the column values
    title        => the title of the column, supposed to appear at first row
    id           => id associated to the column