如何closuresruby gem中的文件“Spreadsheet?”

下面的代码就像第一次运行它时那样工作:

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.closuresExcel电子表格或2.写回到我打开的同一个电子表格。

  1. ruby gem电子表格文档中没有关于closures电子表格的任何信息。 如果有的话,例子在上面的“book.write”语句中结束。 我在这里和其他地方的search都没有closures电子表格中的xls文件。
  2. 电子表格文档build议你可以写回到同一个文件,但build议也许你不应该。 这是这个问题吗? 如果是这样,我写一个临时的wks,然后重命名它?

尝试使用块语法,它似乎为我工作:

 Spreadsheet.open '/Users/me/myruby/Mywks.xls' do |book| sheet = book.worksheet 0 # book should be closed when the block exits end 

你可以closures文件manualy:1)添加这个代码的地方:

 module Spreadsheet class Workbook attr_accessor :io end end 

2)只需打电话

 @book.io.close 

closures文件