当公式更新 Excel 单元格时通知

Notify when a formula updates an Excel cell

以这个特定的电子表格为例,但我需要一个通用的解决方案来作为 VSTO Excel 加载项。

当对 A1 进行更改时,我希望得到通知结果公式在 B1 中的更新。

使用 VSTO,我可以接收 Application.SheetChange 事件,该事件提供代表 A1 的范围,但我没有收到 B1 的显示值也已更改的通知。我发现了 Application.SheetCalculate 事件,但它似乎没有任何有用的参数。

Application.SheetChange += (sheet, range) => Debug.WriteLine($"Column: {range.Column}, Row: {range.Row}");
Application.SheetCalculate += sh =>
{
    var sheet = sh as Excel.Worksheet;
    Debug.WriteLine($"Sheet: {sheet.Name}"); // need a Range
};

在抽象实现中,是否可以在包含函数(上面的 B1)的单元格更新其呈现值时收到通知?

除了对 OP 的评论之外,没有什么可以添加的了。谢谢,蒂姆威廉姆斯和布莱克霍克。

总而言之,可以在加载电子表格时创建有向图,然后在 SheetCalculate 事件上使用该图来确定工作簿中受影响的单元格。主要缺点是该解决方案不能很好地扩展到大型电子表格,因为 [重新] 构建图形是一个 O(n^3) 操作。

[编辑] 事实证明,我们试图实现的业务目标已经实现。 https://support.office.com/en-us/article/What-you-can-do-with-Spreadsheet-Inquire-ebaf3d62-2af5-4cb1-af7d-e958cc5fad42。再加上 Microsoft ACM 和 DRA 服务器,这是一个很好的套件。