2

ID、タスク、説明の列を含む 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データのインポートは簡単ではありませんか?

4

1 に答える 1

2

rooを使用して、Excel を Rails アプリにインポートします。そして、それを行うのはそれほど難しくありません。必要に応じて、Ryan Batesの railscastを見て、roo を使ってそれを行うことができます。

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から取られました (上のコントローラーを見てください) 。routeaction: importtrainerone controller

希望はあなたを助けることができます..!

于 2013-02-21T03:51:00.513 に答える