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

devtools/2025/3/15 19:58:40/

初级代码游戏的专栏介绍与文章目录-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.ppmy.cn/devtools/167359.html

相关文章

芯谷78M05:三端正电压调节器的稳定之选

在电子电路设计中,稳定的电源供应是确保系统正常运行的关键因素之一。78M05作为一款经典的三端正电压调节器,以其简单、可靠和高效的特性,成为了众多工程师在5V电源设计中的首选。本文将深入探讨芯谷78M05的特性、电气参数、典型应用电路以及…

虚拟机新挂载磁盘后磁盘无法使用ssh问题 Permission denied (publickey).

在给vmware虚拟机挂载磁盘后再新磁盘目录里面使用ssh拉取代码一直报错: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. manifests: 虚拟机可以添加硬盘,…

ESP32-H2芯片模组方案,设备物联网通信,智能化无线控制联动

在当今数字化浪潮席卷全球的时代,物联网已不再是一个遥远的概念,它正以迅雷不及掩耳之势,渗透进我们生活与生产的每一个角落。 清晨,阳光透过智能窗帘洒在脸上,智能音箱贴心地播放着今日的新闻与天气;出门…

基于Spring Boot的网上宠物店系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

解决 React 中的 Hydration Failed 错误

解决 React 中的 Hydration Failed 错误 React 的 服务器端渲染(SSR)通过在服务器端生成 HTML 并将其发送给客户端,帮助提高页面加载速度和搜索引擎优化(SEO)。然而,在进行 SSR 后,React 需要进…

Oracle数据库存储结构--逻辑存储结构

数据库存储结构:分为物理存储结构和逻辑存储结构。 物理存储结构:操作系统层面如何组织和管理数据 逻辑存储结构:Oracle数据库内部数据组织和管理数据,数据库管理系统层面如何组织和管理数据 Oracle逻辑存储结构 数据库的逻…

Python----计算机视觉处理(Opencv:自适应二值化,取均值,加权求和(高斯定理))

一、自适应二值化 与二值化算法相比,自适应二值化更加适合用在明暗分布不均的图片,因为图片的明暗不均,导致图片 上的每一小部分都要使用不同的阈值进行二值化处理,这时候传统的二值化算法就无法满足我们的需求 了,于是…

3.14周报

本周主要是在找双目视觉三维人体姿态估计方向的文章,这篇dual-diffusion,双目三维人体姿态估计的双扩散文章,引起了兴趣,作者从由于摄像机数量的减少,增加了3d重建的不确定性入手,然后使用了扩散模型&#…