我有一个在单元格中有值的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是可能的吗?还是有其他的解决方案?
发布于 2017-08-09 23:19:20
最后我解决了这个问题。如果你感兴趣,我使用win32ole是因为在测试了很多rubygem之后,这就是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就是这么做的。
发布于 2019-09-04 19:26:14
公认的答案的问题是,在服务器上,office通常没有安装,因此COM自动化在那里不起作用。使用以下代码时,当Excel打开电子表格时,将重新计算公式。
workbook = RubyXL::Parser.parse(file)
workbook.calc_pr.full_calc_on_load = true发布于 2017-08-09 01:28:41
从RubyXL README上看,该实用程序的目的是读取Excel文件,然后将它们写回。然后,当您在Excel中打开该文件时,您将看到所做的更改,公式将重新计算。
如果你想对win32ole进行COM自动化,你可能会想看看Excel.
https://stackoverflow.com/questions/45571349
复制相似问题