1

Railsを介してデータベースにインポートしたいExcelスプレッドシートのデータがあります。Rails3.2.3とRuby1.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

解決しました

解決

Excelファイルの解析にスプレッドシートgemを使用し、ExcelファイルのアップロードにCarrierWavegemを使用しています。ユーザー用にdeviseモデルを使用しているため、ファイルをインポートするためのコントローラーは次のようになります。

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の宝石があります。roo gemはxlsx形式で使用できますが、テストしていません。ユーザーにExcelを使用してファイルをxls形式で保存し、それをアップロードするように指示します。

(アプリ開発者の観点から)さらに良いのは、csvファイルをインポートすることです。csvの欠点は、ファイルに含まれるテーブルが1つだけであるということです。

一方、Excelのインポートの問題は、セル内の値ではなく数式などを使用して、複数のタブファイルを提供できることです。したがって、エラーチェックを十分に含めるようにしてください。

よくある問題:コードがDateオブジェクトを予期しているときに、Excelシートに文字列として日付を入力する人。または、文字列として人が入力した数字。コードでこれらの問題をテストして処理する必要があります。

http://rubygems.org/gems/rooを参照してください

再:「私にいくつかのコードをください」-それはStackOverflowがどのように機能するかではありません。うまくいけば、上記があなたの旅に役立つでしょう。

于 2012-05-11T18:17:56.883 に答える