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

时间:2017-08-08 14:40:47

标签: ruby formula xlsx rubyxl

我在单元格中有一个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是可行的吗?还是有另一种解决方案?

3 个答案:

答案 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