def [] index_or_string
      if index_or_string.is_a? String
        match = index_or_string.match(/([A-Z]+)([0-9]*)/i)
        col_index = Workbook::Column.alpha_index_to_number_index(match[1])
        row_index = match[2].to_i - 1
        return self[row_index][col_index]
      elsif index_or_string.is_a? Range
        collection = to_a[index_or_string].collect{|a| a.clone}
        return Workbook::Table.new collection
      elsif index_or_string.is_a? Integer
        return to_a[index_or_string]
      end
    end
def [] index_or_string
      if index_or_string.is_a? String
        match = index_or_string.match(/([A-Z]+)([0-9]*)/i)
        col_index = Workbook::Column.alpha_index_to_number_index(match[1])
        row_index = match[2].to_i - 1
        return self[row_index][col_index]
      elsif index_or_string.is_a? Range
        collection = to_a[index_or_string].collect{|a| a.clone}
        return Workbook::Table.new collection
      elsif index_or_string.is_a? Integer
        return to_a[index_or_string]
      end
    end
clones itself *and* the rows it contains

 @return [Workbook::Table] The cloned table
 Overrides normal Array's []-function with support for symbols that identify a column based on the header-values

 @example Lookup using fixnum or header value encoded as symbol
   table[0] #=> <Row [a,2,3,4]> (first row)
   table["A1"] #=> <Cell value="a"> (first cell of first row)

 @param [Fixnum, String] index_or_string to reference to either the row, or the cell
 @return [Workbook::Row, Workbook::Cell, nil]