5

以下のコードは、最初に実行したときに正常に機能します。

require 'rubygems'
require 'spreadsheet'
book = Spreadsheet.open '/Users/me/myruby/Mywks.xls'
sheet = book.worksheet 0
row = sheet.row(1)
puts row[1]
book.write '/Users/me/myruby/Mywks.xls'

もう一度実行すると、次のようなメッセージがさらに表示されます。

/Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:1149:in `setup': undefined method `read' for false:FalseClass (NoMethodError)
    from /Library/Ruby/Gems/1.8/gems/spreadsheet-0.6.5.9/lib/spreadsheet/excel/reader.rb:121:in `read'

これは、次のいずれかに問題があることを示唆しています。1. Excel スプレッドシートを閉じるか、2. 開いた同じスプレッドシートに書き戻す。

  1. スプレッドシートを閉じることについて、ruby gem スプレッドシートのドキュメントには何もありません。例は、どちらかといえば、上記のように「book.write」ステートメントで終わります。ここや他の場所で検索しても、スプレッドシートで xls ファイルを閉じても何も見つかりませんでした。
  2. スプレッドシートのドキュメントは、同じファイルに書き戻すことができることを示唆していますが、そうすべきではないことを示唆しています。それがここの問題ですか?その場合、一時的な wks に書き込み、名前を変更しますか?
4

2 に答える 2

9

ブロック構文を使用してみてください。うまくいくようです:

Spreadsheet.open '/Users/me/myruby/Mywks.xls' do |book|
  sheet = book.worksheet 0
  # book should be closed when the block exits
end
于 2011-12-17T02:10:39.687 に答える
0

手動でファイルを閉じることができます: 1) このコードをどこかに追加します:

module Spreadsheet
  class Workbook
    attr_accessor :io
  end
end

2) 単に呼び出す

@book.io.close

ファイルを閉じる

于 2012-07-13T08:42:09.070 に答える