Class: Roo::Excelx::Workbook

Inherits:
Extractor show all
Defined in:
lib/roo/excelx/workbook.rb

Defined Under Namespace

Classes: Label

Constant Summary

Constants inherited from Extractor

Extractor::COMMON_STRINGS

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ Workbook

Returns a new instance of Workbook.



21
22
23
24
# File 'lib/roo/excelx/workbook.rb', line 21

def initialize(path)
  super
  fail ArgumentError, 'missing required workbook file' unless doc_exists?
end

Instance Method Details

#base_dateObject



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/roo/excelx/workbook.rb', line 46

def base_date
  @base_date ||=
  begin
    # Default to 1900 (minus one day due to excel quirk) but use 1904 if
    # it's set in the Workbook's workbookPr
    # http://msdn.microsoft.com/en-us/library/ff530155(v=office.12).aspx
    result = Date.new(1899, 12, 30) # default
    doc.css('workbookPr[date1904]').each do |workbookPr|
      if workbookPr['date1904'] =~ /true|1/i
        result = Date.new(1904, 01, 01)
        break
      end
    end
    result
  end
end

#base_timestampObject



42
43
44
# File 'lib/roo/excelx/workbook.rb', line 42

def base_timestamp
  @base_timestamp ||= base_date.to_datetime.to_time.to_i
end

#defined_namesObject

aka labels



31
32
33
34
35
36
37
38
39
40
# File 'lib/roo/excelx/workbook.rb', line 31

def defined_names
  doc.xpath('//definedName').each_with_object({}) do |defined_name, hash|
    # "Sheet1!$C$5"
    sheet, coordinates = defined_name.text.split('!$', 2)
    next unless coordinates
    col, row = coordinates.split('$')
    name = defined_name['name']
    hash[name] = Label.new(name, sheet, row, col)
  end
end

#sheetsObject



26
27
28
# File 'lib/roo/excelx/workbook.rb', line 26

def sheets
  doc.xpath('//sheet')
end