3

私はExcelを読んで2つのセルを印刷する簡単なスクリプトを持っています:

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:in ' initialize': そのようなファイルまたはディレクトリはありません - ../data/zipcode_range.xls (Errno::ENOENT) from C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet .rb:68: in 'open' from C:/Ruby193/lib/ruby/gems/1.9.1/gems/spreadsheet-0.7.4/lib/spreadsheet.rb:68: in 'open' from lib/filter. rb:56:in 'get_zipcode_range' from lib/filter.rb:63:in ''

PS それが問題なら、私は Windows XP を使用します。

4

2 に答える 2

4

File.expand_path ドキュメントを使用する必要があります:

wb = Spreadsheet.open File.expand_path("../data/zipcode_range.xls", __FILE__)

投稿したファイルが と同じディレクトリにあると仮定しますdata/data/が現在の Ruby ファイルの親ディレクトリにある場合は、2 回上に移動します。

wb = Spreadsheet.open File.expand_path("../../data/zipcode_range.xls", __FILE__)

この方法を使用する場合、最初../は常に中和します。不明な場合は、生成されたファイル パスのデバッグ出力を作成します。__FILE__File.expand_path

puts File.expand_path("../data/zipcode_range.xls", __FILE__)
于 2012-11-15T14:29:12.917 に答える
0

コードを次から変更する必要があります

wb = Spreadsheet.open "../data/zipcode_range.xls"

wb = Spreadsheet.open "#{File.dirname(__FILE__)}/../data/zipcode_range.xls"
于 2012-11-15T12:17:07.057 に答える