使用Roo Gem在Rails中解析XLS电子表格

我试图用roo gem解析XLS文件,而不使用文件上传插件。 不幸的是我无法访问文件的数据。

我收到错误:

# is not an Excel file 

所以roo没有将文件识别为Excel文件。 我是否需要在本地保存文件才能使用roo,或者有办法解决这个问题。 我想将excel文件的数据直接解析到数据库中。

通过的参数:

 Parameters: {"utf8"=>"✓", "authenticity_token"=>"yLqOpSK981tDNYjKSoWBh0VnFEKSk0XA/wOt3r+yWJc=", "uploadform"=>{"name"=>"xls", "file"=>#<ActionDispatch::Http::UploadedFile:0x007ffac22b6550 @original_filename="cities2.xls", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"uploadform[file]\"; filename=\"cities2.xls\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#>}, "commit"=>"Save Uploadform"} 

我试图访问该文件

  if params[:uploadform][:file].original_filename =~ /.*\.xls$/i oo = Excel.new(params[:uploadform][:file].open) rooparse(oo) end 

我也尝试了params [:uploadform] [:file] .read和params [:uploadform] [:file],但我认为.open将是正确的方法!?

你会建议在这里使用paperclip或carrierwave吗?

谢谢您的帮助!

查看Excel.new的源代码 ,似乎它需要文件名,而不是File对象或处理程序。 换句话说,它需要将完整路径(包括文件名)的字符串表示forms添加到要解析的文件中。 此外,它还会检查文件的扩展名。 因此,如果tempfile不以“.xls”结尾,则需要先重命名该文件。

是的,我无法解析完整的文件但这是另一个问题。 至少我从表中的第一行进入我的数据库,其中包含以下行:

 require 'fileutils' require 'iconv' tmp = params[:uploadform][:file].tempfile file = File.join("public", params[:uploadform][:file].original_filename) FileUtils.cp tmp.path, file oo = Excel.new(file) rooparse(oo) FileUtils.rm file 

感谢您的输入!

这是路径:

 params[:file].tempfile.path. 

你可以试试这个:

 Excel.new(params[:uploadform][:file].tempfile.path)