1

xlsx在单元格中有一个值,其中许多都被其他单元格中的公式引用(在同一张表中)。我正在使用,RubyXL因为我没有找到另一个可以帮助我编写、编辑和保存现有 xlsx 文件的 gem。现在要清楚,让我们看一个我在做什么和我想要的例子。想象一组3个细胞;A1、B1 和 C1,其中 C1 是 A1 和 B1 的总和 (=A1+B1),所以如果 A1 中有 4,B1 中有 6,则 C1 等于 10。我用workbook = RubyXL::Parser.parse('example.xlsx'), 之后打开 xlsx我将单元格 A1 的值从 4 修改为 5 并保存。这是问题所在,如果我们在更改后读取单元格 C1,我们仍然有之前的结果 10。我如何根据公式更新该结果?RubyXL 可以吗?还是有其他解决方案?

4

3 回答 3

4

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

workbook = RubyXL::Parser.parse(file)
workbook.calc_pr.full_calc_on_load = true
于 2019-09-04T11:26:13.637 回答
1

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

如果你想做 Excel 的 COM 自动化,你可能想看看win32ole 。

于 2017-08-08T17:28:40.873 回答
1

最后我解决了这个问题。如果您有兴趣,我使用了 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 这样做。

于 2017-08-09T15:19:20.487 回答