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的 railscasts来使用 roo。

我给你我的 roo 示例代码

宝石文件

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是取自您的routewhich 指向您action: importtrainerone controller(查看上面的控制器)

希望能帮到你..!

于 2013-02-21T03:51:00.513 回答