|
本帖最后由 网络小猪 于 2014-3-19 12:46 编辑
功能与需求描述:
这个例子功能实现,关闭一个工作簿的时候,如果这个工作簿A1单元格内容是只读,哪么就直接不保存就关闭掉,没有任何保存的提示。我为什么要写这个功能,因为我有一个工作簿大多数的时间只为了查阅,编辑的机会很少,我怕不小心把里面的内容给更改了,然后保存,哪数据错了,有人还会问,直接把Excel文件设置成只读不就行了吗?但是我是编辑的机会很少,不是完全不要编辑,我自己编辑后,直接保存就行了,不要关闭工作簿的时候才保存。
代码分析:
1、发布者
(1)声明委托
public delegate void AppEvents_WorkbookBeforeCloseEventHandler(Microsoft.Office.Interop.Excel.Workbook Wb, ref bool Cancel)
现成的,是Microsoft.Office.Interop.Excel 的成员,不用自己写。
(2)发布事件
WorkbookBeforeClose,也是现成的,是Microsoft.Office.Interop.Excel 的成员,不用自己写。
2、订阅者
Event.cs中18-23行
3、使用
ThisAddIn.cs 14行,实例化一个My_Event
ThisAddIn.cs 18行,在加载外接程序时,通过myEvent.WorkbookBeforeClose_Event(xlsApp),给WorkbookBeforeClose事件注册一个订阅者xlsApp_BeforeClose
然后WorkbookBeforeClose触发时,就会自动执行xlsApp_BeforeClose的代码。
WorkbookBeforeClose会在工作簿关闭之前立即触发。
以下是【ThisAddIn.cs】代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Xml.Linq;
- using Excel = Microsoft.Office.Interop.Excel;
- using Office = Microsoft.Office.Core;
- using Microsoft.Office.Tools.Excel;
- namespace _03_Event
- {
- public partial class ThisAddIn
- {
- public Excel.Application xlsApp;
- My_Event myEvent = new My_Event();
- private void ThisAddIn_Startup(object sender, System.EventArgs e)
- {
- xlsApp = Globals.ThisAddIn.Application;
- myEvent.WorkbookBeforeClose_Event(xlsApp);
- }
- private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
- {
-
- }
- #region VSTO 生成的代码
- /// <summary>
- /// 设计器支持所需的方法 - 不要
- /// 使用代码编辑器修改此方法的内容。
- /// </summary>
- private void InternalStartup()
- {
- this.Startup += new System.EventHandler(ThisAddIn_Startup);
- this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
- }
-
- #endregion
- }
- }
复制代码 以下是【Event.cs】代码:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Microsoft.Office.Interop.Excel;
- using Excel = Microsoft.Office.Interop.Excel;
- namespace _03_Event
- {
- public class My_Event
- {
- private Excel.Application xlsApp;
- public void WorkbookBeforeClose_Event(Excel.Application app)
- {
- xlsApp=app;
- xlsApp.WorkbookBeforeClose += xlsApp_BeforeClose;
- }
- private static void xlsApp_BeforeClose(object Wb, ref bool Cancel)
- {
- if (((Excel.Workbook)Wb).ActiveSheet.range("A1").value == "只读")
- {
- ((Excel.Workbook)Wb).Saved = true;
- }
- }
- }
- }
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
评分
-
查看全部评分
|