2013-05-07 89 views
1

我必須從電子表格讀取數據才能修改某些行,然後將更新的行/單元格寫入相同的文件。使用SPREADSHEET編輯電子表格

我已經使用Spreadsheet gem和Ruby 2.0.0。

當我將結果寫回到同一個文件時,我無法再打開xls。我得到一個錯誤

「文件格式無效」

在MS Excel

將更新寫入不同的文件時,我可以打開該文件,但它處於受保護的視圖中。有沒有解決這個問題的方法?

下面是示例代碼:

require 'rubygems' 
require 'spreadsheet' 

book = Spreadsheet::open('filePath') 
sheet = book.worksheet 0 

## have application logic in here 

book.write('filePath') 
+0

不[商務部](https://github.com/zdavatz/spreadsheet)明確地表示:「電子表格支持Ruby 1.8.6,1.8.7,1.9.2 ,1.9.3「?當你寫入同一個文件時,你會收到警告嗎? (可能是源於['ruby-ole'](https://github.com/aquasync/ruby-ole)''spreadsheet'depends]的問題。 – 2013-05-07 14:11:17

+0

沒有....沒有警告 – user2330585 2013-05-07 14:13:02

+0

1.9.3會發生什麼? – 2013-05-07 14:14:19

回答

3

我這個問題曾幾次,他們已經在日誌中的問題進行了一年左右了。

第一個問題是,它在電子表格加載它時鎖定了文件,並且沒有明確的方式關閉它,只有這樣才能讓它不鎖定在這個代碼塊中。它打開它並將第一個工作表存儲到它自己的變量中,然後關閉文件。

worksheet = nil 
    Spreadsheet.open workbook_name do |inner_book| 
     worksheet = inner_book.worksheet 0 
    end 
worksheet 

如果你想要所有的工作表,你可以做類似的事情。除了文件打開關閉/問題之外,您還需要根據格式捕獲工作表內容。我知道我的目的,我最終做了以下內容來捕獲內容。這可悲的是失去了你在源電子表格中可能有的任何格式。

rows = [] 
worksheet.each do |row| 
    rows << row 
end 

然後,您可以製作自己的工作簿/工作表並遍歷行並將它們添加到新工作表/書中。然後用相同的文件名保存新書。

它沒有樂趣或效率,但它是一種解決問題的方法。希望這有助於。

0

檢查您的文件擴展名。 電子表格,writeexcel..etc寶石似乎無法與xlsx文件一起使用。 嘗試.xls的不是原來的.xlsx

相關問題