2013-02-21 2 views
2

Я создал лист первенствовать с колоннами ид, задачи, описаниеRails: столбцы Excel, семена

Я нахожу это и положил его в seeds.rb:

require 'spreadsheet' 


Spreadsheet.open('/db/data/uebung.xls') do |uebung| 
    book.worksheet('Sheet1').each do |row| 
    break if row[0].nil? 
    puts row.join(',') 
end 
end 

Я получаю это сообщение:

[DEPRECATED] By requiring 'parseexcel', 'parseexcel/parseexcel' and/or 
     'parseexcel/parser' you are loading a Compatibility layer which 
     provides a drop-in replacement for the ParseExcel library. This 
     code makes the reading of Spreadsheet documents less efficient and 
     will be removed in Spreadsheet version 1.0.0 

Что вы думаете. Не удается ли импортировать данные Excel?

ответ

2

Я использую roo для импорта excel в мое приложение для рельсов. И это не так сложно сделать. Вы можете посмотреть the railscasts от Райана Бейтса, чтобы сделать это с помощью roo, если хотите.

Даю пример кода РОО

Gemfile

gem 'rubyzip' 
gem 'spreadsheet' 
gem 'nokogiri' 
gem 'roo' 

Контроллер:

def import 
    @trainerone = Trainerone.find(params[:trainerone_id]) 

    Trainerone.import(params[:file], @trainerone.id) 
    redirect_to @trainerone, notice: "Import Success." 
end 

Модель:

def self.import(file, trainer_id) 
    trainerone = Trainerone.find(trainer_id) 
    spreadsheet = open_spreadsheet(file) 
    header = spreadsheet.row(1) 
    (2..spreadsheet.last_row).each do |i| 
    row = Hash[[header, spreadsheet.row(i)].transpose] 
    trainer = Trainerone.create! row.to_hash 
    end 
end 

def self.open_spreadsheet(file) 
    case File.extname(file.original_filename) 
    when '.csv' then Csv.new(file.path, nil, :ignore) 
    when '.xls' then Excel.new(file.path, nil, :ignore) 
    when '.xlsx' then Excelx.new(file.path, nil, :ignore) 
    else raise "Unknown file type: #{file.original_filename}" 
    end 
end 

вид:

<%= form_tag import_trainerones_path(@trainerone.id), multipart: true do %> 
    <%= file_field_tag :file %> 
    <%= submit_tag "Import" %> 
<% end %> 

Этот import_trainerones_path был взят из вашего route, который, указывая на ваш action: import на вашем trainerone controller (смотреть на контроллер выше)

Надежда может помочь вам ..!

+0

ОК я реализую это. Мое имя контроллера ist Trainerone. Я не понимаю этого в форме yout: form_tag import_sales_journal_header_sales_journal_details_path (@ sales_journal_header.id). И что такое SalesJournalHeader? – ubuseral

+1

Я только что отредактировал свой ответ, надеюсь, может сделать дело более ясным. 'SalesJournalHeader' - моя модель, поэтому ваша модель должна быть« Trainerone ». 'import_sales_journal_header_sales_journal_details_path' - это мои маршруты, которые должны быть' import_trainerones_path' – ksugiarto

Смежные вопросы