2011-09-12 45 views
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. 電子表格文檔建議您可以回寫到同一個文件,但建議也許你不應該。這是問題嗎?如果是這樣,我寫入一個臨時周,然後重命名它?
+0

哪一行觸發異常? –

+1

@AndrewGrimm顯然它是第3行,從「book = spreadsheet.open」開始。 – Roy

+0

我試着添加下面的代碼,但那也不管用。與上述結果完全相同。 afile = File.open(「/ Users/royclymer/myruby/Weekly Total.xls」) afile.close我無法弄清楚如何格式化上面的代碼在這個評論。 – Roy

回答

9

使用塊語法嘗試,它似乎爲我工作:

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

爲什麼我不能在此投票超過一次!爲了讓這裏的人遇到同樣的問題,請讓我拋出一些關鍵字:在您嘗試使用Carrierwave上傳文件和Spreadsheet來讀取/寫入上傳的Excel文件的請注意,對於WIndows機器,您必須關閉電子表格在試圖刪除/複製excel文件之前,因爲Windows鎖定了該文件並且會給出「Errno :: EACCES(Permission denied)」錯誤。 –

0

您可以關閉文件manualy: 1)添加某處此代碼:

module Spreadsheet 
    class Workbook 
    attr_accessor :io 
    end 
end 

2)簡單地調用

@book.io.close 

關閉文件