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 回答