1

我有来自 Excel 电子表格的数据,我想通过 Rails 导入数据库。我正在使用 Rails 3.2.3 和 Ruby 1.9.2。

数据是用户名和密码,文件名是member.xlsx.

<%= form_for @member do |f| %>
    <%= f.text_field :import,
        :maxlength=>'50',
        :style=>'width: 250px;',
        :placeholder => 'browse file *.sql or *.xlsx' %>
    <%= f.submit  %><% end %>

我的桌子:

create_table :members do |t|
  t.string :username
  t.string :password_hash
  t.string :password_salt

解决了

解决方案

我正在使用电子表格 gem 来解析 Excel 文件,并使用 CarrierWave gem 来上传 Excel 文件。因为我正在为用户使用设计模型,所以这是用于导入文件的控制器的样子

def import
    if params[:excel_file].nil?
      redirect_to user_new_import_path, :flash => { :error => 'You have not selected a file'}
    else
      test_file = params[:excel_file]
      file = ExcelUploader.new
      file.store!(test_file)
      book = Spreadsheet.open "#{file.store_path}"
      sheet1 = book.worksheet 0
      sheet1.each 1 do |row|
        name = row[0]
        email = row[2]
        generated_password = Devise.friendly_token.first(6) 
        temp_password = generated_password
        @user = User.create(:name => name, :email => email, :password => temp_password, :password_confirmation => temp_password)     
         UserMailer.password_send(@user).deliver
      end
      if @user.save
        redirect_to users_path, :notice => "success"
      else
        redirect_to new_import_user_path, :flash => { :error => 'error. try again' }
      end
    end
end
4

1 回答 1

1

导入 sql 文件是一个可怕的想法,因为 sql 可以对您的数据库做任何事情。

导入 Excel 文件工作正常。有 Excel gems 可以读取数据。roo gem可用于 xlsx 格式,但我尚未对其进行测试。我告诉用户使用 Excel 以 xls 格式存储文件,然后他们上传。

更好的(从应用程序开发人员的角度来看)是导入 csv 文件。csv 的缺点是该文件仅包含一个表。

另一方面,Excel 导入的一个问题是人们可以为您提供多个选项卡文件、公式而不是单元格中的值等。 - 所以一定要包括大量的错误检查。

常见问题:当您的代码需要 Date 对象时,人们在 Excel 工作表中将日期作为字符串输入。或者人们作为字符串输入的数字。您的代码应该测试和处理这些问题。

http://rubygems.org/gems/roo

回复:“给我一些代码”——这不是 StackOverflow 的工作方式。希望以上内容对您的旅程有所帮助。

于 2012-05-11T18:17:56.883 回答