Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何从URL读取xlsx或xls文件_Ruby_Excel_Xls_Xlsx_Open Uri - Fatal编程技术网

Ruby 如何从URL读取xlsx或xls文件

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?”,用于

我正在尝试使用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?”,用于#
但使用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
    对象的方式如下:
    oo=Excel.new(“http://www.somedomain.com/simple_spreadsheet.xls“
    我通过删除roo中对.xlsx扩展名的检查来修复它。当然,用例确保它始终是一个.xlsx文件,因此它适用于我的用例。
    Roo::Excelx.new(path.to_s)
    
    file =  Roo::Excelx.new(params[:file].path,nil, :ignore)