公式更新Excel单元格时通知

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

  • A1:包含数字5
  • B1:包含一个function=(A1*3) ,显示15

当对A1进行更改时,我想要得到关于它的通知以及在B1中产生的公式更新。

使用VSTO,我可以下沉Application.SheetChange事件,该事件提供代表A1的Range,但是我不会收到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的意见之外,没有太多的补充。 谢谢,Tim Williams和Blackhawk。

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

[编辑]我们试图达到的业务目标已经完成。 https://support.office.com/zh-cn/article/What-you-can-do-with-Spreadsheet-Inquire-ebaf3d62-2af5-4cb1-af7d-e958cc5fad42 。 加上微软ACM和DRA服务器,这是一个甜蜜的套件。