我在单元格中有一个T
值,其中很多都是用其他单元格中的公式引用的(在同一张表格中)。我正在使用xlsx
,因为我找不到另一个帮助我编写,编辑和保存现有xlsx文件的宝石。
现在要清楚,让我们看看我正在做什么和我想要的一个例子。
想象一组3个细胞; A1,B1和C1其中C1是A1和B1的总和(= A1 + B1),所以如果A1中有4,B1中有6,则C1等于10.我用{{打开xlsx 1}},我将单元格A1的值从4修改为5并保存。这是问题,如果我们在更改后读取单元格C1,我们仍然有前面的结果10。
我怎样才能更新公式呢? RubyXL是可行的吗?还是有另一种解决方案?
答案 0 :(得分:0)
从RubyXL README听起来,该实用程序旨在读取Excel文件,然后将其写回。然后,当您在Excel中打开文件时,您将看到更改并重新计算公式。
如果要进行Excel的COM自动化,可能需要查看win32ole。
答案 1 :(得分:0)
最后我解决了这个问题。如果你有兴趣我使用win32ole,因为在测试了很多rubygems后,这就像我在问题中所说的那样工作。
require 'win32ole'
begin
xl = WIN32OLE.new('Excel.Application')
workbook = xl.Workbooks.Open('my_route')
worksheet = workbook.Worksheets(1)
# Here we make operations like this one...
worksheet.Cells(2,2).value = 2
# After any operations we can see the results of referenced cells inmediatly
# Save the file if you want
# workbook.Save
workbook.Close
rescue => e
xl.Quit
end
总而言之,RubyXL工作正常,但在编辑文件时不反映公式中引用的单元格的结果。 win32ole那样做。
答案 2 :(得分:0)
已接受答案的问题在于,通常在服务器上未安装服务器,因此COM自动化在该处无法工作。 当您使用以下代码时,Excel打开电子表格时将重新计算公式。
workbook = RubyXL::Parser.parse(file)
workbook.calc_pr.full_calc_on_load = true