如何关闭ruby gem中的文件“Spreadsheet?”

时间:2011-09-12 23:55:33

标签: ruby excel file spreadsheet spreadsheet-gem

下面的代码与我第一次运行它时的工作方式相同:

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然后重命名吗?

2 个答案:

答案 0 :(得分:9)

尝试使用块语法,它似乎对我有用:

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

答案 1 :(得分:0)

您可以手动关闭文件: 1)在这个代码中添加:

module Spreadsheet
  class Workbook
    attr_accessor :io
  end
end

2)只需致电

@book.io.close

关闭文件