lib/squib/api/data.rb in squib-0.0.3 vs lib/squib/api/data.rb in squib-0.0.4

- old
+ new

@@ -1,52 +1,52 @@ -require 'roo' - -module Squib - - # Pulls Excel data from `.xlsx` files into a column-based hash - # - # Pulls the data into a Hash of arrays based on the columns. First row is assumed to be the header row. - # See the example `samples/excel.rb` in the [source repository](https://github.com/andymeneely/squib/tree/master/samples) - # - # @example - # # Excel file looks like this: - # # | h1 | h2 | - # # ------------ - # # | 1 | 2 | - # # | 3 | 4 | - # data = xlsx file: 'data.xlsx', sheet: 0 - # {'h1' => [1,3], 'h2' => [2,4]} - # - # @option opts file [String] the file to open. Must end in `.xlsx`. Opens relative to the current directory. - # @option opts sheet [Integer] (0) The zero-based index of the sheet from which to read. - # @return [Hash] a hash of arrays based on columns in the spreadsheet - # @api public - def xlsx(opts = {}) - opts = Squib::SYSTEM_DEFAULTS.merge(opts) - opts = Squib::InputHelpers.fileify(opts) - s = Roo::Excelx.new(opts[:file]) - s.default_sheet = s.sheets[opts[:sheet]] - data = {} - s.first_column.upto(s.last_column) do |col| - header = s.cell(s.first_row,col).to_s - data[header] = [] - (s.first_row+1).upto(s.last_row) do |row| - cell = s.cell(row,col) - # Roo hack for avoiding unnecessary .0's on whole integers - cell = s.excelx_value(row,col) if s.excelx_type(row,col) == [:numeric_or_formula, "General"] - data[header] << cell - end#row - end#col - data - end#xlsx - module_function :xlsx - - class Deck - - # Convenience call for Squib.xlsx - def xlsx(opts = {}) - Squib.xlsx(opts) - end - - end -end - +require 'roo' + +module Squib + + # Pulls Excel data from `.xlsx` files into a column-based hash + # + # Pulls the data into a Hash of arrays based on the columns. First row is assumed to be the header row. + # See the example `samples/excel.rb` in the [source repository](https://github.com/andymeneely/squib/tree/master/samples) + # + # @example + # # Excel file looks like this: + # # | h1 | h2 | + # # ------------ + # # | 1 | 2 | + # # | 3 | 4 | + # data = xlsx file: 'data.xlsx', sheet: 0 + # {'h1' => [1,3], 'h2' => [2,4]} + # + # @option opts file [String] the file to open. Must end in `.xlsx`. Opens relative to the current directory. + # @option opts sheet [Integer] (0) The zero-based index of the sheet from which to read. + # @return [Hash] a hash of arrays based on columns in the spreadsheet + # @api public + def xlsx(opts = {}) + opts = Squib::SYSTEM_DEFAULTS.merge(opts) + opts = Squib::InputHelpers.fileify(opts) + s = Roo::Excelx.new(opts[:file]) + s.default_sheet = s.sheets[opts[:sheet]] + data = {} + s.first_column.upto(s.last_column) do |col| + header = s.cell(s.first_row,col).to_s + data[header] = [] + (s.first_row+1).upto(s.last_row) do |row| + cell = s.cell(row,col) + # Roo hack for avoiding unnecessary .0's on whole integers + cell = s.excelx_value(row,col) if s.excelx_type(row,col) == [:numeric_or_formula, "General"] + data[header] << cell + end#row + end#col + data + end#xlsx + module_function :xlsx + + class Deck + + # Convenience call for Squib.xlsx + def xlsx(opts = {}) + Squib.xlsx(opts) + end + + end +end +