2013-03-17 67 views
0

我試圖用小豆(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> 

打開從URL文件中讀取一個XLSX或XLS文件,但它看起來像有沒有對此表示支持用小豆(只接受路徑名)

無法使用臨時文件路徑名要麼

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庫/寶石,我可以用這個目的是什麼?我只需要讀取xls和xlsx文件。我不需要寫。由於我在Heroku上,我只能使用Tempfiles而不是實際的文件。

+1

您是否試過在沒有'open'的情況下傳入url?根據文檔,你應該實例化一個新的Excel對象的方式如下:oo = Excel.new(「http://www.somedomain.com/simple_spreadsheet.xls」)' – fbonetti 2013-03-17 16:57:55

+0

我修正了它通過刪除roo中的.xlsx擴展名的檢查。當然,用例確保它始終是一個.xlsx文件,因此適用於我的情況。 – 2013-04-01 08:46:47

回答

1

這可能不是您想到的,但我使用兩個軟件包來讀取xls和xlsx文件,這比我想要的更常見。

+0

這是一個與rails有關的問題,你說它適用於java和Perl! – 2014-04-30 04:42:13

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"=>"[email protected]", "Phone"=>"8032696336.0", "Org"=>"ABCD"} 
{"Name"=>"Paige H. Chen", "E-mail"=>"[email protected]", "Phone"=>"7502167067.0", "Org"=>"ABCD"} 
{"Name"=>"Sherri E. Melton", "E-mail"=>"[email protected]", "Phone"=>"7044576998.0", "Org"=>"ABCD"} 
{"Name"=>"Gretchen I. Hill", "E-mail"=>"[email protected]", "Phone"=>"7967784377.0", "Org"=>"ABCD"} 
{"Name"=>"Karen U. Puckett", "E-mail"=>"[email protected]", "Phone"=>"9151299999.0", "Org"=>"ABCD"} 
[...] 
0

我能夠通過添加附加to_s字符串轉換爲路徑,以獲得NoMethod錯誤(未定義的方法)的坐:

Roo::Excelx.new(path.to_s) 

對我來說,這是一個上傳的Excel文件,我試圖在Roo寶石加工,雖然這裏