def cell reference
      # if the reference is to a named range of cells, get that range and return it
      if named_range = named_ranges.detect{|e| e.name == reference}
        cells = named_range.cells.compact
        if cells.empty?
          return nil
        else
          return cells.length == 1 ? cells.first : cells
        end
      end
      
      # check if the named_range is a full column reference
      if column_reference?(named_range)
        return all_cells_in_column named_range.formula
      end
      
      # if the reference is to an area of cells, get all the cells in that area and return them
      cells = cells_in_area(reference)
      unless cells.empty?
        return cells.length == 1 ? cells.first : cells
      end
      
      if column_reference?(reference)
        return all_cells_in_column reference
      end

      ref = POI::CELL_REF.new(reference)
      single_cell ref
    end
def cell reference
      # if the reference is to a named range of cells, get that range and return it
      if named_range = named_ranges.detect{|e| e.name == reference}
        cells = named_range.cells.compact
        if cells.empty?
          return nil
        else
          return cells.length == 1 ? cells.first : cells
        end
      end
      
      # check if the named_range is a full column reference
      if column_reference?(named_range)
        return all_cells_in_column named_range.formula
      end
      
      # if the reference is to an area of cells, get all the cells in that area and return them
      cells = cells_in_area(reference)
      unless cells.empty?
        return cells.length == 1 ? cells.first : cells
      end
      
      if column_reference?(reference)
        return all_cells_in_column reference
      end

      ref = POI::CELL_REF.new(reference)
      single_cell ref
    end
takes a String in the form of a 3D cell reference and returns the Cell (eg. "Sheet 1!A1")

 If the reference refers to a contiguous range of cells an array of Cells will be returned