我正在尝试使用roo(1.11.0)
从URL打开文件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(它只接受路径名)
无法使用临时文件路径名
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而不是实际的文件。
答案 0 :(得分:1)
这可能不是您的想法,但我使用两个包来读取xls和xlsx文件,这些文件比我想要的更常见。
xlsx中的read.xlsx使用Java,大部分时间都可以使用。我不认为它直接从网址读取,我通常先下载.file。
gdata中的read.xls使用Perl(如果您使用Windows则下载,否则自动),并直接从URL读取。这是一个从联合国人口预测中读取文件的例子:
库( “GDATA”)
url&lt; - “http://esa.un.org/unpd/wpp/Excel-Data/DB04_Population_ByAgeSex_Annual/WPP2010_DB4_F1B_POPULATION_BY_AGE_BOTH_SEXES_ANNUAL_2011-2100.XLS”
data&lt; - read.xls(url,sheet = 1)
答案 1 :(得分:1)
您可以将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"}
[...]
答案 2 :(得分:0)
我可以通过在路径中添加额外的start_with?
字符串转换来获取NoMethod错误(未定义的方法to_s
):
Roo::Excelx.new(path.to_s)
在我的情况下,这是一个上传的Excel文件,我尝试使用Roo gem处理,但
答案 3 :(得分:0)
这里没有什么对我有用,但是这是(对于xlsx):
file = Roo::Excelx.new(params[:file].path,nil, :ignore)
来自:http://railscasts.com/episodes/396-importing-csv-and-excel?view=asciicast