2013-03-17 2 views
0

J'essaie d'ouvrir un fichier à partir d'une URL à l'aide roo (1.11.0)Comment lire un fichier xlsx ou xls à partir d'une 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> 

, mais il semble que il n'y a pas de support pour cette en utilisant roo (il accepte uniquement les noms de chemin)

ne pouvez pas utiliser un nom de chemin de fichier temporaire soit

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 

Toute bibliothèque/gem Ruby que je peux utiliser à cette fin? J'ai seulement besoin de lire les fichiers xls et xlsx. Je n'ai pas besoin d'écrire. Depuis que je suis sur Heroku, je ne peux utiliser que des fichiers temporaires Tempfiles.

+1

Avez-vous essayé de passer dans l'URL sans 'open'? Selon la documentation, la façon dont vous êtes supposé instancier un nouvel objet 'Excel' est la suivante:' oo = Excel.new ("http://www.somedomain.com/simple_spreadsheet.xls") ' – fbonetti

+0

J'ai corrigé en supprimant la vérification de l'extension .xlsx dans roo. Bien sûr, le cas d'utilisation assure qu'il s'agit toujours d'un fichier .xlsx donc cela fonctionne pour mon cas. –

Répondre

1

Ce n'est peut-être pas ce que vous avez en tête, mais j'utilise deux paquets pour lire les fichiers xls et xlsx, qui sont plus courants que je ne le voudrais.

+0

c'est une question liée aux rails, vous dites qu'il fonctionne avec java et perl !!! –

1

vous pouvez utiliser RemoteTable pour XLSX, XLS, CSV, et d'autres formats:

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

vous donne:

{"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

j'ai pu obtenir tour de l'erreur de NoMethod (méthode non définie) en ajoutant une conversion de chaîne to_s supplémentaire sur le chemin:

Roo::Excelx.new(path.to_s) 

Dans mon cas, il était un fichier Excel téléchargé que je essayé de traiter avec la gemme Roo, bien que

Questions connexes