初级代码游戏的专栏介绍与文章目录-CSDN博客
我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。
这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。
源码指引:github源码指引_初级代码游戏的博客-CSDN博客
上一篇 VSTO(C#)Excel开发9:处理格式和字体-CSDN博客
我们已经能够对内容和格式进行简单的处理,但是如果涉及到外部的连接和未保存的数据,我们应该在哪里处理呢?这就需要了解启动和卸载的顺序。为了在用户修改时能及时更新,也需要监测事件。
目录
一、整个加载项的启动和卸载
二、工作簿打开和关闭
三、监视单元格变化 变化通知
3.1 用Application的SheetChange
3.2 用Worksheet的Change
3.2 以上两种方法都不能监测格式改变
一、整个加载项的启动和卸载
ThisAddin.cs很简单,就是定义了加载项启动和卸载时被调用的函数:
很容易看明白。注意我在ThisAddIn_Shutdown里面加了一个消息框,可以用来判断被调用的时机,实测证明,Shutdown事件是在提示是否保存之后发生的,也就是执行到Shutdown整个Excel的关闭是不可避免的了。
二、工作簿打开和关闭
Application对象还有很多事件可供处理,与工作簿相关的都以Workbook开头:
打开工作簿触发WorkbookOpen(注意不是新建),关闭工作簿前触发WorkbookBeforeClose,我们可以为感兴趣的事件编写处理代码:
private void ThisAddIn_Startup(object sender, System.EventArgs e){this.Application.WorkbookBeforeClose += Application_WorkbookBeforeClose;this.Application.WorkbookOpen += Application_WorkbookOpen;this.Application.SheetChange += Application_SheetChange;Log.LogI("ThisAddIn_Startup");}private void ThisAddIn_Shutdown(object sender, System.EventArgs e){MessageBox.Show("ThisAddIn_Shutdown");}private void Application_WorkbookBeforeClose(Microsoft.Office.Interop.Excel.Workbook workbook, ref bool Cancel){MessageBox.Show("Application_WorkbookBeforeClose");}private void Application_WorkbookOpen(Microsoft.Office.Interop.Excel.Workbook workbook){MessageBox.Show("Application_WorkbookOpen");}
每个事件的委托的参数都是不一样的,以上代码演示了工作簿打开和关闭的写法,通过实测弹出消息框的先后可以知道触发的时机和顺序。
三、监视单元格变化 变化通知
3.1 用Application的SheetChange
代码:
private void ThisAddIn_Startup(object sender, System.EventArgs e){
。。。。。。this.Application.SheetChange += Application_SheetChange;
。。。。。。}private void Application_SheetChange(object Sh, Range Target){MessageBox.Show("Application_SheetChange "+ Target.Address);}
修改单元格的内容就会弹出消息框:
注意是编译完毕,鼠标点到其它单元格时才触发的,如果是批量操作只弹出一次:
3.2 用Worksheet的Change
前面用Application的SheetChange有点复杂,因为可能有多个工作簿和多个工作表,虽然从Range对象是可以找到所属的工作簿和工作表的,毕竟多了几步。
用工作表的Change事件就比较直接了,代码如下:
workSheet.Change += ActiveSheet_Change;private void ActiveSheet_Change(Range Target){......}
重点是委托类型(也就是参数写法)。
3.2 以上两种方法都不能监测格式改变
我还没找到方法。
(这里是文档结束)