Method: ActiveImport::ImportExcel#parse

Defined in:
lib/active_import/import_excel.rb

#parse(&block) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/active_import/import_excel.rb', line 70

def parse(&block)
  column_mappings = @converter.columns

  excelx = false
  case File.extname(data_file).downcase
    when ".xls"
      e = Excel.new(data_file)
    when ".xlsx"
      excelx = true
      e = Excelx.new(data_file)
  end

  result = find_excel_header_row(e)

  if result.nil?
    puts "Could not find header row.".red
    return
  end

  e.default_sheet = result[:sheet]
  header_row = result[:row]
  headers = result[:headers]

  # Loop through the data
  puts "Reading data from row #{header_row + 1} to #{e.last_row}"
  @estimated_rows = e.last_row - header_row;
  row_number = 0
  (header_row + 1).upto(e.last_row) do |row|
    row_number += 1
    import_row = {}
    headers.each_pair do |name, column|
      if excelx
        value = e.cell(row, column).to_s
      else
        value = e.cell(row, column).to_s
      end
      import_row[name] = value
    end
    yield import_row, @converter, row_number, @estimated_rows
  end
end