【发布时间】:2011-04-27 07:40:45
【问题描述】:
我有一个 Excel 2003 的 C#.Net 插件。我希望有一个可以附加的钩子(事件?),以检测用户何时从活动工作表中删除了一行或多行,如发生这种情况时,一些缓存需要重新计算或丢弃。
有没有这样的钩子或事件?如果没有,有没有办法实现我想要的?
【问题讨论】:
标签: interop vsto excel-2003
我有一个 Excel 2003 的 C#.Net 插件。我希望有一个可以附加的钩子(事件?),以检测用户何时从活动工作表中删除了一行或多行,如发生这种情况时,一些缓存需要重新计算或丢弃。
有没有这样的钩子或事件?如果没有,有没有办法实现我想要的?
【问题讨论】:
标签: interop vsto excel-2003
不幸的是,似乎没有一种方法可以检测何时删除了行。根据Worksheet event list,您可以使用 Change 事件来确定某些内容已更改,然后遍历工作表中的所有行以找出已更改的内容并相应地更新您的缓存。 This 也可以帮助您思考使用 Change 方法的其他方式。
【讨论】:
您可以尝试以下方法: 创建一个命名范围,指向工作表中最远的单元格(单元格 XFD1048576)。 如果引发工作表更改事件,则测试此命名范围是否仍引用同一单元格。如果是这样,则没有插入或删除任何行或列,并且该事件指示其他一些更改(如单元格值更改)。 如果此命名范围引用不同的地址,则已删除行/列。 如果它返回 #REF 错误,则表示添加了一行或一列,并且命名范围的地址超出了最大值。在这两种情况下,删除命名范围并重新创建它。
【讨论】: