Sha256: f1f2851a03298ae7565283a3abcfca16c36a89f3b121b5de83eb8c73ec40e887

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

require 'date'
require 'spreadsheet/row'

module Spreadsheet
  module Excel
##
# Excel-specific Row methods
class Row < Spreadsheet::Row
  ##
  # The Excel date calculation erroneously assumes that 1900 is a leap-year. All
  # Dates after 28.2.1900 are off by one.
  LEAP_ERROR = Date.new 1900, 2, 28
  ##
  # Force convert the cell at _idx_ to a Date
  def date idx
    _date at(idx)
  end
  ##
  # Force convert the cell at _idx_ to a DateTime
  def datetime idx
    _datetime at(idx)
  end
  def each &block
    size.times do |idx|
      block.call self[idx]
    end
  end
  ##
  # Access data in this Row like you would in an Array. If a cell is formatted
  # as a Date or DateTime, the decoded Date or DateTime value is returned.
  def [] idx, len=nil
    if len
      idx = idx...(idx+len)
    end
    if idx.is_a? Range
      data = []
      idx.each do |i|
        data.push enriched_data(i, at(i))
      end
      data
    else
      enriched_data idx, at(idx)
    end
  end
  private
  def _date data # :nodoc:
    return data if data.is_a?(Date)
    date = @worksheet.date_base + data.to_i
    if date > LEAP_ERROR
      date -= 1
    end
    date
  end
  def _datetime data # :nodoc:
    return data if data.is_a?(DateTime)
    date = _date data
    hour = (data % 1) * 24
    min  = (hour % 1) * 60
    sec  = (min  % 1) * 60
    DateTime.new(date.year, date.month, date.day,
                 hour.to_i, min.to_i, sec.round)
  end
  def enriched_data idx, data # :nodoc:
    res = nil
    if link = @worksheet.links[[@idx, idx]]
      res = link
    elsif data.is_a?(Numeric) && fmt = format(idx)
      res = if fmt.datetime? || fmt.time?
              _datetime data
            elsif fmt.date?
              _date data
            end
    end
    res || data
  end
end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spreadsheet-0.6.1.9 lib/spreadsheet/excel/row.rb