【问题标题】:Update cell values referenced by a formula with RubyXL使用 RubyXL 更新公式引用的单元格值
【发布时间】:2017-08-08 14:40:47
【问题描述】:

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

【问题讨论】:

    标签: ruby formula xlsx rubyxl


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我可以在我写完文件后打开文件时看到更改,但不能看到重新计算的公式。生病检查win32ole thx
      • 感谢Tom的提示,win32ole帮我解决了问题
      • 酷,我很高兴能帮上忙!
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多