1

Spreadsheet gemを使用してExcelデータをデータベースにインポートしています。私の見解は: -

<% form_for :dump, :url=>{:action=>"excel_import"}, :html => { :multipart => true } do |f| -%>
 Select an Excel File :
 <%= f.file_field :excel_file -%>
 <%= submit_tag 'Submit' -%>
<% end -%>

そして私のコントローラーは:-

require 'spreadsheet'

def excel_import
 Spreadsheet.client_encoding = 'UTF-8'
 book = Spreadsheet.open params[:dump][:excel_file]
 sheet1 = book.worksheet 0
 sheet1.each do |row|
 TimeSheet.new(:ac_no => row[0]).save
 end
end

パラメーター:-

 {"utf8"=>"✓", "authenticity_token"=>"vhyy1pzYJpM9hCdgP5AiFC1Pv0UtbpLSzStZDWiZzs8=", "dump"=>{"excel_file"=>#<ActionDispatch::Http::UploadedFile:0x9a8f5f8 @original_filename="SwipeData_DeliveryTeam_Sep12.xls", @content_type="application/vnd.ms-excel", @headers="Content-Disposition: form-data; name=\"dump[excel_file]\"; filename=\"SwipeData_DeliveryTeam_Sep12.xls\"\r\nContent-Type: application/vnd.ms-excel\r\n", @tempfile=#<File:/tmp/RackMultipart20121025-4534-n7pw14>>}, "commit"=>"Submit"}

Excelファイルをアップロードして送信ボタンをクリックしようとすると、エラーが発生します:-

 can't convert ActionDispatch::Http::UploadedFile into String

ブログを参考にさせていただきました

誰でもこのコードで何が問題なのか教えてください。

4

1 に答える 1

3

あなたが言及したのと同じブログ参照を使用して、まったく同じ問題を抱えていました。

この参照を使用して解決できました。

これが私の方法に変更された方法であり、私の方法は現在機能しています!!

require 'spreadsheet'
require 'fileutils'
require 'iconv'

def excel_import

 tmp = params[:dump][:excel_file].tempfile

 Spreadsheet.client_encoding = 'UTF-8'

 book = Spreadsheet.open tmp.path

 sheet1 = book.worksheet 0
 sheet1.each do |row|
 TimeSheet.new(:ac_no => row[0]).save
 end
end

FileUtils.rm tmp.path

幸運を!デニス

于 2012-10-29T15:13:53.670 に答える