使用 RubyXL 更新公式引用的单元格值

Update cell values referenced by a formula with RubyXL

我有一个 xlsx 在单元格中包含值,其中许多值在其他单元格(在同一个 sheet 中)中被公式引用。我正在使用 RubyXL,因为我没有找到另一个 gem 来帮助我编写、编辑和保存现有的 xlsx 文件。 现在要明确一点,让我们看一个我在做什么和我想要做什么的例子。 想象一组 3 个细胞; A1、B1 和 C1,其中 C1 是 A1 和 B1 (=A1+B1) 的总和,所以如果我们在 A1 中有一个 4,在 B1 中有一个 6,那么 C1 等于 10。我用 [= 打开 xlsx 12=],然后我将单元格 A1 的值从 4 修改为 5 并保存。这就是问题所在,如果我们在更改后读取单元格 C1,我们仍然有之前的结果 10。 我如何根据公式更新该公式? RubyXL 可行吗?或者有其他解决方案吗?

RubyXL README 看来,该实用程序旨在读取 Excel 文件,然后将它们写回。然后,当您在 Excel 中打开文件时,您会看到所做的更改,并且会重新计算公式。

如果您想对 Excel 进行 COM 自动化,您可能需要查看 win32ole

我终于解决了这个问题。如果您有兴趣,我使用了 win32ole,因为在测试了很多 ruby​​gems 之后,这就是像我在问题中所说的那样工作的 unic。

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 做到这一点。

已接受答案的问题是服务器上通常没有安装 office,因此 COM 自动化在那里无法工作。 当您使用以下代码时,公式会在 Excel 打开电子表格时重新计算。

workbook = RubyXL::Parser.parse(file)
workbook.calc_pr.full_calc_on_load = true