Office中国论坛/Access中国论坛

标题: 【作业】03课-小猪 [打印本页]

作者: 网络小猪    时间: 2014-3-19 10:53
标题: 【作业】03课-小猪
本帖最后由 网络小猪 于 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】代码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml.Linq;
  6. using Excel = Microsoft.Office.Interop.Excel;
  7. using Office = Microsoft.Office.Core;
  8. using Microsoft.Office.Tools.Excel;
  9. namespace _03_Event
  10. {
  11.     public partial class ThisAddIn
  12.     {
  13.          public  Excel.Application xlsApp;
  14.          My_Event myEvent = new My_Event();
  15.          private void ThisAddIn_Startup(object sender, System.EventArgs e)
  16.         {
  17.             xlsApp = Globals.ThisAddIn.Application;
  18.             myEvent.WorkbookBeforeClose_Event(xlsApp);
  19.          }
  20.         private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
  21.         {
  22.            
  23.         }
  24.         #region VSTO 生成的代码

  25.         /// <summary>
  26.         /// 设计器支持所需的方法 - 不要
  27.         /// 使用代码编辑器修改此方法的内容。
  28.         /// </summary>
  29.         private void InternalStartup()
  30.         {
  31.             this.Startup += new System.EventHandler(ThisAddIn_Startup);
  32.             this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
  33.         }
  34.         
  35.         #endregion
  36.     }
  37. }
复制代码
以下是【Event.cs】代码:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Microsoft.Office.Interop.Excel;
  6. using Excel = Microsoft.Office.Interop.Excel;

  7. namespace _03_Event
  8. {
  9.   public   class  My_Event
  10.     {
  11.       private Excel.Application xlsApp;
  12.       public void WorkbookBeforeClose_Event(Excel.Application app)
  13.           {
  14.               xlsApp=app;
  15.               xlsApp.WorkbookBeforeClose += xlsApp_BeforeClose;
  16.           }
  17.         private static void xlsApp_BeforeClose(object Wb, ref bool Cancel)
  18.         {
  19.             if (((Excel.Workbook)Wb).ActiveSheet.range("A1").value == "只读")
  20.             {
  21.                 ((Excel.Workbook)Wb).Saved = true;
  22.             }
  23.         }
  24.     }
  25. }
复制代码

[attach]53609[/attach]



作者: faunus    时间: 2014-3-19 10:58
很好的作业,小电电 批阅。
作者: 紫电    时间: 2014-3-19 13:01
听校长的,通过





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3