2014-06-06 35 views
1

我一直使用spreadsheet來讀取模板excel文件,修改它併爲最終用戶輸出一個新文件。使用ruby更新現有的excel文件模板公式

據我可以從文檔識別電子表格提供的方式來輸入或編輯生成的文檔中的公式。

但是,我的腳本的目的是讀取網站中未定義數量的項目,並將其輸入電子表格,然後計算總計和小計。

最終用戶(使用excel或libreoffice等)隨後可以對項目數量進行輕微修改,同時總計更新(由於公式),因爲它們已經習慣了。

我查看了writeexcel gem,聲稱可以輸入公式,但我看不到如何獲取現有模板文件並修改它以生成我的輸出。我只能創建新的工作簿。

請提出任何提示?我不想使用Win32OLE。

+0

對於我來說,目前還不清楚你到底想要改變什麼。你只是想在你的新文件中包含公式嗎?或者您是否想爲最終用戶提供一個用於編輯Excel工作表的基於Ruby(基於Ruby)的UI?還有什麼能阻止你像過去一樣使用電子表格? –

+0

我已更新帖子,是否更清楚?我想在新文件中包含公式,並且無法繼續使用電子表格,因爲就閱讀文檔而言,它不支持公式。 – bluekeys

回答

1

這非常困難;顯然,所有用於處理Excel文件的Gems都缺少一些關鍵功能。

我能想到的這個問題有兩種方法:

  • 使用電子表格的組合(讀取Excel文件),並使用writeexcel(將輸出寫入文件)
  • 使用輸入文件已經包含在一個單獨的「公式」表所需的公式和複製公式「真正的」表

下面是第二種方法的一個簡單的版本:

require 'rubygems' 
require 'spreadsheet' 

Dir.chdir(File.dirname(__FILE__)) 

# input file, contains this data 
# Sheet0: headers + data (for this simple demo, we will generate the data on-the-fly) 
# Sheet1: Formula '=SUM(Worksheet1.A2:A255) in cell A1 
book = Spreadsheet.open 'in.xls' 
sheet = book.worksheet 0 
formulasheet = book.worksheet 1 

# insert some input data (in a real application, 
# this data would already be present in the input sheet) 
rows = rand(20) + 1 
(1..rows).each do |i| 
    sheet[i,0] = i 
end 

# add total at bottom of column C 
sheet[rows+1,2] = formulasheet[0,0] 

# write output file 
book.write 'out.xls' 

但是,如果

  • 您使用的同一列的輸入數據和您的總數(自那時以來,總將嘗試包括本身在計算),這將失敗