Class: Stockboy::Readers::Spreadsheet

Inherits:
Stockboy::Reader show all
Defined in:
lib/stockboy/readers/spreadsheet.rb

Overview

Parse an Excel spreadsheet

Backed by Roo gem. See roo for other configuration options.

Instance Attribute Summary collapse

Attributes inherited from Stockboy::Reader

#encoding

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}, &block) ⇒ Spreadsheet

Initialize a new Spreadsheet reader

Parameters:

  • opts (Hash) (defaults to: {})


62
63
64
65
66
67
68
69
70
71
72
# File 'lib/stockboy/readers/spreadsheet.rb', line 62

def initialize(opts={}, &block)
  super
  @format = opts[:format] || :xls
  @sheet  = opts[:sheet]  || :first
  @first_row = opts[:first_row]
  @last_row  = opts[:last_row]
  @header_row  = opts[:header_row]
  @headers = opts[:headers]
  @roo_options = opts[:roo_options] || {}
  DSL.new(self).instance_eval(&block) if block_given?
end

Instance Attribute Details

#first_rowFixnum

Line number of first data row, starts counting at 1, like in Excel

Returns:

  • (Fixnum)


40
# File 'lib/stockboy/readers/spreadsheet.rb', line 40

dsl_attr :first_row

#formatSymbol

Spreadsheet format

Returns:

  • (Symbol)

    :xls or :xslx



19
# File 'lib/stockboy/readers/spreadsheet.rb', line 19

dsl_attr :format

#header_rowFixnum

Line number to look for headers, starts counting at 1, like in Excel

Returns:

  • (Fixnum)


33
# File 'lib/stockboy/readers/spreadsheet.rb', line 33

dsl_attr :header_row

#headersArray

Override to set headers manually

Returns:

  • (Array)


54
# File 'lib/stockboy/readers/spreadsheet.rb', line 54

dsl_attr :headers

#last_rowFixnum

Line number of last data row, use negative numbers to count back from end

Returns:

  • (Fixnum)


47
# File 'lib/stockboy/readers/spreadsheet.rb', line 47

dsl_attr :last_row

#optionsHash (readonly)

Roo-specific options hash passed to underlying spreadsheet parser

Returns:

  • (Hash)


89
90
91
# File 'lib/stockboy/readers/spreadsheet.rb', line 89

def options
  @roo_options
end

#sheetFixnum

Spreadsheet sheet number, defaults to first

Returns:

  • (Fixnum)


26
# File 'lib/stockboy/readers/spreadsheet.rb', line 26

dsl_attr :sheet

Instance Method Details

#parse(content) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/stockboy/readers/spreadsheet.rb', line 74

def parse(content)
  with_spreadsheet_tempfile(content) do |table|
    headers = table_headers(table)

    enum_data_rows(table).inject([]) do |rows, i|
      rows << Hash[headers.zip(table.row(i))]
    end
  end
end