Ruby 如何从URL读取xlsx或xls文件
我正在尝试使用roo(1.11.0)从URL打开一个文件Ruby 如何从URL读取xlsx或xls文件,ruby,excel,xls,xlsx,open-uri,Ruby,Excel,Xls,Xlsx,Open Uri,我正在尝试使用roo(1.11.0)从URL打开一个文件 foobaz-iMac:pipeline foobazlabs$irb irb(主):001:0>要求“roo” 需要“=>true irb(主):002:0>要求“打开uri” =>正确 irb(主):003:0>Roo::Excelx.new(打开https://www.filepicker.io/api/file/xPxn6cu3RZuQdgrx4y72")) NoMethodError:未定义的方法“start_with?”,用于
foobaz-iMac:pipeline foobazlabs$irb
irb(主):001:0>要求“roo”
需要“=>true
irb(主):002:0>要求“打开uri”
=>正确
irb(主):003:0>Roo::Excelx.new(打开https://www.filepicker.io/api/file/xPxn6cu3RZuQdgrx4y72"))
NoMethodError:未定义的方法“start_with?”,用于#
但使用roo似乎不支持这种方式(它只接受路径名)
也不能使用临时文件路径名
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
irb(main):004:0>t=Tempfile.new('temp.xlsx'))
=> #
irb(主):005:0>t.binmode
irb(主):006:0>打开(“https://www.filepicker.io/api/file/xPxn6cu3RZuQdgrx4y72“”{| data | t.write data.read}
=> 13494
irb(main):007:0>Roo::Excelx.new(t.path)
使用Roo::Excelx.new处理.xlsx电子表格文件。这有.xlsx203017-2753-1p3l5l6
类型错误:/var/folders/q_389;/q738l9cj3xl90yfs1g8wc4200000gn/T/temp.xlsx20130317-2753-1p3l5l6不是Excel xlsx文件
有没有Ruby library/gem可以用于此目的?我只需要读取xls和xlsx文件。我不需要写信。因为我在Heroku上,所以我只能使用Tempfiles而不是实际文件。这可能不是您想要的,但我使用两个包来读取xls和xlsx文件,它们比我想要的更常见
- xlsx中的read.xlsx使用Java,大部分时间都可以工作。我不认为它直接从url读取,我通常先下载.file
- gdata中的read.xls使用Perl(如果使用Windows,则下载,否则自动),并直接从url读取。下面是一个从联合国人口预测中读取文件的示例:
图书馆(“gdata”)
url可用于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"} [...]
通过向路径中添加一个额外的字符串转换,我能够克服NoMethod错误(未定义的方法
):start\u with?
Roo::Excelx.new(path.to_s)
在我的例子中,它是一个上传的Excel文件,我试图用Roo gem处理它,尽管这里的任何东西对我都不起作用,但这是肯定的(对于xlsx):
发件人:您是否尝试在不打开的情况下传入url?根据文档,实例化新的
对象的方式如下:Excel
我通过删除roo中对.xlsx扩展名的检查来修复它。当然,用例确保它始终是一个.xlsx文件,因此它适用于我的用例。oo=Excel.new(“http://www.somedomain.com/simple_spreadsheet.xls“
Roo::Excelx.new(path.to_s)
file = Roo::Excelx.new(params[:file].path,nil, :ignore)