当前位置: 首页 > article >正文

VSTO(C#)Excel开发10:启动和卸载顺序 事件处理 监视变化

初级代码游戏的专栏介绍与文章目录-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 以上两种方法都不能监测格式改变

        我还没找到方法。


(这里是文档结束)


http://www.kler.cn/a/589253.html

相关文章:

  • 蓝桥杯备考:模拟+堆 ---接水问题
  • Unity 封装一个依赖于MonoBehaviour的计时器(下) 链式调用
  • 【新人系列】Golang 入门(五):集合类型 - 下
  • Docker系列——从零开始打包FunASR的Http服务
  • Nuxt3 使用 ElementUI Plus报错问题
  • Android之Sentry接入
  • 在 Windows 11 上使用 PyCharm 创建一个 Flask 项目,并使用 `pipenv` 进行虚拟环境管理
  • HarmonyOS NEXT 声明式UI语法学习笔记-创建自定义组件
  • 麒麟服务器操作系统QT系列软件工具手册
  • AD9850函数信号发生器制作(全套资料)
  • RK3568 android11 基于PN7160的NXP NFC移植
  • ASP.NET Webform和ASP.NET MVC 后台开发 大概80%常用技术
  • 操作系统的磁盘调度
  • 鸿蒙Next开发中的坑与问题总结
  • 五大基础算法——枚举算法
  • 从被动响应到主动预见:智能可观测性技术的变革与实践
  • Qt常见面试题合集
  • ⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具
  • Spring cloud Gateway中的GlobalFilter接口及其方法
  • Spring Boot 核心知识点精讲:助你快速上手与深度理解