当公式更新 Excel 单元格时通知
Notify when a formula updates an Excel cell
以这个特定的电子表格为例,但我需要一个通用的解决方案来作为 VSTO Excel 加载项。
- A1:包含数字 5。
- B1:包含函数
=(A1*3)
,显示15.
当对 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 服务器,这是一个很好的套件。
以这个特定的电子表格为例,但我需要一个通用的解决方案来作为 VSTO Excel 加载项。
- A1:包含数字 5。
- B1:包含函数
=(A1*3)
,显示15.
当对 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 服务器,这是一个很好的套件。