使用ruby更新现有的Excel文件模板公式

时间:2014-06-06 13:13:55

标签: ruby excel

我一直在使用spreadsheet读取模板excel文件,修改它并为最终用户输出新文件。

据我所知,从文档电子表格中无法在生成的文档中输入或编辑公式。

但是,我的脚本的目的是从网站读取未定义数量的项目并将其输入电子表格,然后计算总计和小计。

最终用户(使用excel或libreoffice等)然后可以对项目数量稍作修改,同时总计更新(由于公式),因为它们已经习以为常。

我已经查看了声称能够输入公式的writeexcel gem,但是我无法看到如何获取现有模板文件并对其进行修改以生成输出。我只能创建新的工作簿。

有任何提示吗?我不想使用Win32OLE。

1 个答案:

答案 0 :(得分: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'

但是,如果

,这将失败
  • 您为输入数据和总计使用相同的列(从那时起,总数将尝试将自己包含在计算中)