使用Roo打开带有嵌入空格的文件名

时间:2014-07-30 00:20:26

标签: ruby-on-rails ruby filenames

Ruby 2.0.0,Rails 4.0.3,Windows 8.1 Update,Roo 1.13.2

我正在尝试使用Roo打开包含嵌入空格的Excel电子表格。到目前为止,我无法做到这一点。我真的不知道这个问题是否仅限于Roo。如果我重命名它以消除空格,我没有问题。我尝试编码,但后来它只是说文件不存在。我可以在文件包含空格时打开它吗?

代码示例:

  exceptions = [URI::InvalidURIError, IOError]
  puts "f is #{f}"
  puts "f exist? #{File.exist?(f)}"
  begin
    xls = Roo::Spreadsheet.open(f)
  rescue *exceptions => e
    puts e.message
  end

  encoded_f = URI.encode(f).to_s
  puts "encoded_f is #{encoded_f}"
  puts "encoded_f exist? #{File.exist?(encoded_f)}"
  begin
    xls = Roo::Spreadsheet.open(encoded_f)
  rescue *exceptions => e
    puts e.message
  end

  gsub_f = f.gsub(" ", "") # Rename file without spaces
  File.rename(f, gsub_f)
  puts "gsub_f is #{gsub_f}"
  puts "gsub_f exist? #{File.exist?(gsub_f)}"
  begin
    xls = Roo::Spreadsheet.open(gsub_f)
  rescue *exceptions => e
    puts e.message
  end

输出样本:

f is Whitt Report 2014-07-28-0803.xls
f exist? true
bad URI(is not URI?): Whitt Report 2014-07-28-0803.xls

encoded_f is Whitt%20Report%202014-07-28-0803.xls
encoded_f exist? false
file Whitt%20Report%202014-07-28-0803.xls does not exist

gsub_f is WhittReport2014-07-28-0803.xls
gsub_f exist? true

最后没有给出消息,因为文件打开成功。

1 个答案:

答案 0 :(得分:1)

这是由Roo::Spreadsheet#open方法中调用URI模块的方式引起的。

我发布了此问题的修复程序,现已合并。如果您更新Roo gem,则不应再出现此问题。