[英]Importing excel file in rails applications
I am following Ryan Bates railcast tutorial for importing excel file through a rail application. 我正在关注Ryan Bates铁路广播教程,以通过铁路应用程序导入excel文件。 My Ruby version is 2.2.4 and rails version is 4.2.6 I installed 'roo' gem already. 我的Ruby版本是2.2.4,而rails版本是4.2.6我已经安装了'roo'gem。
My app\\models\\user.rb file is: 我的app \\ models \\ user.rb文件是:
class User < ActiveRecord::Base
require 'csv'
def self.import(file)
spreadsheet= open_spreadsheet(file)
header=spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row=Hash[[header,spreadsheet.row(i)].transpose]
user=find_by_id(row["id"])||new
user.attributes=row.to_hash.slice(*accessible_attributes)
user.save
end
end
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
#when ".csv" then Roo::Csv.new (file.path nil, :ignore)
when ".xls" then Roo::Excel.new (file.path)
#when ".xlsx" then Excelx.new (file.path, nil, :ignore)
else raise "Unknown file type: #{file.original_filename}"
end
end
end
My app\\controllers\\users_controller.rb file is: 我的app \\ controllers \\ users_controller.rb文件是:
class UsersController < ApplicationController
def index
@users=User.all
end
def import
User.import(params[:file])
redirect_to root_url, notice: "Activity data imported!"
end
end
Now my application home page is working properly. 现在,我的应用程序主页可以正常工作。 But after selectiong the file from file chooser when I am clicking on the "import excel" button (I have done all this in index.html.erb file),,then it is showing the following error: 但是,当我单击“导入excel”按钮(我已经在index.html.erb文件中完成所有操作)之后,从文件选择器中选择了文件之后,它显示以下错误:
RuntimeError in UsersController#import UsersController#import中的RuntimeError
could not locate a workbook, possibly an empty file passed 找不到工作簿,可能传递了一个空文件
Can not solve this problem yet. 还不能解决这个问题。 The method open_spreadsheet is already defined there then whats the reason of the error? 已经定义了open_spreadsheet方法,那么错误的原因是什么?
Try changing this line: 尝试更改此行:
spreadsheet= open_spreadsheet(file)
to: 至:
spreadsheet= User.open_spreadsheet(file)
EDIT: You are also missing and end: 编辑:您也丢失并且结束:
def self.import(file)
spreadsheet= open_spreadsheet(file)
header=spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row=Hash[[header,spreadsheet.row(i)].transpose]
user=find_by_id(row["id"])||new
user.attributes=row.to_hash.slice(*accessible_attributes)
user.save
end
end #<-----------
EDIT: 编辑:
class User < ActiveRecord::Base
require 'csv'
def self.import(file)
spreadsheet= open_spreadsheet(file)
header=spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row=Hash[[header,spreadsheet.row(i)].transpose]
user=find_by_id(row["id"])||new
user.attributes=row.to_hash.slice(*accessible_attributes)
user.save
end
end
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
#when ".csv" then Roo::Csv.new (file.path nil, :ignore)
when ".xls" then Roo::Excel.new (file.path)
#when ".xlsx" then Excelx.new (file.path, nil, :ignore)
else raise "Unknown file type: #{file.original_filename}"
end
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.