module ExcelImport::Base::ClassMethods
Public Instance Methods
excel_import(role, options = {})
click to toggle source
# File lib/excel-import.rb, line 9 def excel_import(role, options = {}) fields = options[:fields] default = options[:default] || {} class_eval %( def self.parse_excel_#{role}(excel_file) _excel_import(#{fields}, #{default}, excel_file) end def self.import_excel_#{role}(excel_file) models = _excel_import(#{fields}, #{default}, excel_file) models.each do |model| model.save end models end def self.get_excel_#{role} _excel_import_generate_sample(#{fields}, #{default}) end ) end
Private Instance Methods
_excel_import(fields, default, excel_file)
click to toggle source
# File lib/excel-import.rb, line 33 def _excel_import(fields, default, excel_file) spreadsheet = ExcelImport::ImportFile.open_spreadsheet(excel_file) models = [] (2..spreadsheet.last_row).each do |i| row = spreadsheet.row(i) params = {} fields.each_index do |index| data = row[index].is_a?(Float) ? row[index].to_i.to_s : row[index].to_s params[fields[index]] = data end params.merge! default models << self.new(params) end models end
_excel_import_generate_sample(fields, default)
click to toggle source
# File lib/excel-import.rb, line 52 def _excel_import_generate_sample(fields, default) file = Tempfile.open [self.to_s, '.xlsx'] output = Axlsx::Package.new output.workbook.add_worksheet(:name => 'sheet') do |sheet| field_strs = fields.map do |field| I18n.t("activerecord.attributes.#{self.name.downcase}.#{field}") end sheet.add_row field_strs end output.use_shared_strings = true output.serialize(file) file end