【发布时间】:2013-03-17 12:35:42
【问题描述】:
我正在尝试使用 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 而不是实际的 Files。
【问题讨论】:
-
你试过在没有
open的情况下传入url吗?根据文档,您应该实例化一个新的Excel对象的方式如下:oo = Excel.new("http://www.somedomain.com/simple_spreadsheet.xls") -
我通过删除 roo 中对 .xlsx 扩展名的检查来修复它。当然,用例确保它始终是一个 .xlsx 文件,因此它适用于我的情况。
标签: ruby excel xls xlsx open-uri