Rails:Excel列,种子
我创build了一个列ID,任务,说明的Excel表
我find这个,并把它放在我的种子.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数据?
我使用roo导入excel到我的rails应用程序。 这并不难。 如果你愿意的话,你可以看Ryan Bates 的railscast 。
我给你我的示例代码
的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
上action: import
(查看上面的控制器)
希望可以帮助你..!