簡體   English   中英

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

[英]Update cell values referenced by a formula with RubyXL

我在單元格中有一個xlsx值,其中許多值是在其他單元格(在同一張紙上)中用公式引用的。 我使用RubyXL原因是,我沒有找到另一個可以幫助我編寫,編輯和保存現有xlsx文件的寶石。 現在要弄清楚,讓我們看一下我正在做的事以及我想要的例子。 想象一下一個由3個單元組成的組; A1,B1和C1,其中C1是A1和B1的總和(= A1 + B1),因此,如果我們在A1中有4,在B1中有6,則C1等於10。我用workbook = RubyXL::Parser.parse('example.xlsx')打開xlsx workbook = RubyXL::Parser.parse('example.xlsx') ,然后我將單元格A1的值從4修改為5並保存。 這是問題所在,如果我們在更改后讀取單元格C1,我們仍具有先前的結果10。我如何根據公式更新該值? RubyXL可以使用嗎? 還是有其他解決方案?

RubyXL自述文件中 ,聽起來該實用程序旨在讀取Excel文件,然后將其寫回。 然后,當您在Excel中打開文件時,您將看到所做的更改,並且將重新計算公式。

如果要進行Excel的COM自動化,可能需要查看win32ole

最后,我解決了這個問題。 如果您有興趣,我使用win32ole,因為在測試了很多rubygems之后,這是一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM