公式更新Excel单元格时通知

时间:2015-10-08 16:35:01

标签: c# excel vba excel-vba vsto

请考虑此特定电子表格的示例,但我需要一个通用解决方案才能用作VSTO Excel插件。

  • A1:包含数字 5
  • B1:包含一个功能=(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)更新其显示值时,是否可以收到通知?

1 个答案:

答案 0 :(得分:0)

除了对OP的评论之外,没有太多要补充的内容。谢谢Tim Williams和Blackhawk。

总之,可以在加载电子表格时创建有向图,然后使用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服务器相结合,它是一个甜蜜的套件。