如何从URL读取xlsx或xls文件

我试图从URL打开一个文件使用roo(1.11.0)

Foobazs-iMac:pipeline foobazlabs$ irb irb(main):001:0> require 'roo' require '=> true irb(main):002:0> require 'open-uri' => true irb(main):003:0> Roo::Excelx.new(open("https://www.filepicker.io/api/file/xPxn6cu3RZuQdgrx4y72")) NoMethodError: undefined method `start_with?' for #<Tempfile:0x007ffd091d25c8> 

但它看起来不支持这个使用roo(它只接受path名称)

无法使用临时文件path名称

 irb(main):004:0> t = Tempfile.new('temp.xlsx') => #<File:/var/folders/q_/q738l9cj3xl90yfs1g8wc4200000gn/T/temp.xlsx20130317-2753-1p3l5l6> irb(main):005:0> t.binmode irb(main):006:0> open("https://www.filepicker.io/api/file/xPxn6cu3RZuQdgrx4y72") { |data| t.write data.read } => 13494 irb(main):007:0> Roo::Excelx.new(t.path) use Roo::Excelx.new to handle .xlsx spreadsheet files. This has .xlsx20130317-2753-1p3l5l6 TypeError: /var/folders/q_/q738l9cj3xl90yfs1g8wc4200000gn/T/temp.xlsx20130317-2753-1p3l5l6 is not an Excel-xlsx file 

任何Ruby库/gem,我可以使用这个目的? 我只需要读取xls和xlsx文件。 我不需要写。 由于我在Heroku,我只能使用Tempfiles而不是实际的文件。

这可能不是你想到的,但我使用两个包来读取xls和xlsx文件,这比我想要的更常见。

您可以使用RemoteTable进行XLSX,XLS,CSV和其他格式的操作:

 require 'remote_table' RemoteTable.new('https://www.filepicker.io/api/file/xPxn6cu3RZuQdgrx4y72', format: :xlsx).each do |row| puts row end 

给你:

 {"Name"=>"Kristina H. Chung", "E-mail"=>"cheenu.madan@gmail.com", "Phone"=>"8032696336.0", "Org"=>"ABCD"} {"Name"=>"Paige H. Chen", "E-mail"=>"cheenu.madan@gmail.com", "Phone"=>"7502167067.0", "Org"=>"ABCD"} {"Name"=>"Sherri E. Melton", "E-mail"=>"cheenu.madan@gmail.com", "Phone"=>"7044576998.0", "Org"=>"ABCD"} {"Name"=>"Gretchen I. Hill", "E-mail"=>"cheenu.madan@gmail.com", "Phone"=>"7967784377.0", "Org"=>"ABCD"} {"Name"=>"Karen U. Puckett", "E-mail"=>"cheenu.madan@gmail.com", "Phone"=>"9151299999.0", "Org"=>"ABCD"} [...] 

我可以通过添加一个额外的to_sstring转换path来获取NoMethod错误(未定义的方法start_with? ):

 Roo::Excelx.new(path.to_s) 

在我的情况下,这是一个上传的Excel文件,我试图用Roogem来处理

这里没有任何东西适用于我,但这是(对于xlsx):

 file = Roo::Excelx.new(params[:file].path,nil, :ignore) 

来自: http : //railscasts.com/episodes/396-importing-csv-and-excel?view=asciicast