在Excel VSTO中插入行事件?

作为一个更简单的方法来说“ 如何处理通过VSTO插入列/行在Excel中的范围的大小调整? ”:

有没有办法在Excel中VSTO来处理“插入行”或“插入列”事件?

Excel中没有这样的事件。 当通过Worksheet.Change或Application.SheetChange事件插入或删除行时,您可以选取。

有关详细的讨论,请参阅Dick Kusleika的“ 删除行”一文。

但是,如果您想要实现的目标是确保在插入行时调整范围对象的大小,那么就像您指出的那样, 您不需要做任何事情 ,因为Range对象会自动扩展。

希望这可以帮助!

范围自动resize,所以你通常不应该做任何事情对你的对象,并没有一个RowInserted事件。 如果要在插入行时收到通知,则必须改用Worksheet.Change

我发现检查这个事件处理器中的行是否被更改的最快方法是比较Target.Address == Target.EntireRow.Address 。 这些将在插入,删除或使用剪切/插入移动时返回true。 您可以使用Target.EntireColumn中的列来执行相同Target.EntireColumn 。 请注意,如果插入失败,这也会返回true(例如,如果有一个数据透视表,Excel中止插入)

对我来说,这正是我想要的,可以在失败的行动上运行。

 private void ActiveWorksheet_Change(Excel.Range Target) { if(Target.Address == Target.EntireRow.Address) { //do stuff on insert/delete/cut+insert } } 

如果只需要插入,删除或剪切/插入行,或者如果在操作失败时需要做一些不同的事情,则可以先执行我所尝试的操作:

Worksheet.UsedRange.Rows.CountWorksheet.Name作为关键字存储在Dictionary<string, int> 。 然后,将新的Worksheet.UsedRange.Rows.Count与保存的计数进行比较,并相应地执行。 请注意,如果没有find方法来捕获这些types的事件并更新/删除字典条目,但是我还没有find一种更好的方法来识别表单所以你必须考虑到这一点。