我有一个简单的脚本应该读取excel并打印两个单元格:
require 'rubygems'
gem 'ruby-ole','1.2.11.4'
require 'spreadsheet'
class Filter
# Gets zipcode range
def get_zipcode_range
wb = Spreadsheet.open "../data/zipcode_range.xls"
sheet = wb.worksheet 0
[sheet.cell(0, 0), sheet.cell(0, 1)]
end
end
f = Filter.new
puts f.get_zipcode_range
文件结构如下:
FilterExcel
data
zipcode_range.xls
lib
filter.rb
当我打开命令提示符并转到FilterExcel \ lib并运行:
ruby filter.rb
它给出了预期的输出:
3911AW
3911ZZ
但是当我从项目根文件夹FilterExcel运行脚本时,它会引发错误:
C:\ Documents and Settings \ Erik \ FilterExcel> ruby lib \ filter.rb C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:在 'initialize':没有这样的文件或目录 - ../data/zipcode_range.xls (错误:: ENOENT) 来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:in '打开' 来自C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68:in '打开' 来自lib / filter.rb:56:'get_zipcode_range' 来自lib / filter.rb:63:在''
中
P.S。如果重要的话,我会使用Windows XP。
答案 0 :(得分:3)
您应该使用File.expand_path
docs:
wb = Spreadsheet.open File.expand_path("../data/zipcode_range.xls", __FILE__)
假设您发布的文件与data/
位于同一目录中。如果data/
位于当前Ruby文件的父目录中,请上两次:
wb = Spreadsheet.open File.expand_path("../../data/zipcode_range.xls", __FILE__)
第一个../
在使用__FILE__
这种方式时始终会中和File.expand_path
。如果您不确定,请对生成的文件路径进行调试输出:
puts File.expand_path("../data/zipcode_range.xls", __FILE__)
答案 1 :(得分:0)
您应该从
更改代码wb = Spreadsheet.open "../data/zipcode_range.xls"
到
wb = Spreadsheet.open "#{File.dirname(__FILE__)}/../data/zipcode_range.xls"