class RubyXL::Cell

def column

def column
  r && r.first_col
end

def column=(v)

def column=(v)
  self.r = RubyXL::Reference.new(row || 0, v)
end

def index_in_collection

def index_in_collection
  r.col_range.begin
end

def is_date?

def is_date?
  return false unless raw_value =~ /\A\d+(?:\.\d+)?\Z/ # Only fully numeric values can be dates
  num_fmt = self.number_format
  num_fmt && num_fmt.is_date_format?
end

def number_format

def number_format
  workbook.stylesheet.get_number_format_by_id(get_cell_xf.num_fmt_id)
end

def raw_value

def raw_value
  value_container && value_container.value
end

def raw_value=(v)

def raw_value=(v)
  self.value_container ||= RubyXL::CellValue.new
  value_container.value = v
end

def row

def row
  r && r.first_row
end

def row=(v)

def row=(v)
  self.r = RubyXL::Reference.new(v, column || 0)
end

def value(args = {})

stripping any special formatting from RichText).
Gets massaged value of the cell, converting datatypes to those known to Ruby (that includes
def value(args = {})
  return raw_value if args[:raw]
  case datatype
  when RubyXL::DataType::SHARED_STRING then
    workbook.shared_strings_container[raw_value.to_i].to_s
  else
    if is_date? then workbook.num_to_date(raw_value.to_f)
    elsif raw_value.is_a?(String) && (raw_value =~ /\A-?\d+(\.\d+(?:e[+-]\d+)?)?\Z/i) # Numeric
      if $1 then raw_value.to_f
      else raw_value.to_i
      end
    else raw_value
    end
  end
end