设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 8998|回复: 2
打印 上一主题 下一主题

【作业】03课-小猪

[复制链接]
跳转到指定楼层
1#
发表于 2014-3-19 10:53:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 网络小猪 于 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. }
复制代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1V币 +1 收起 理由
faunus + 1 (V币)课程报名、录像学习、代码练习跟贴.

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
发表于 2014-3-19 10:58:18 | 只看该作者
很好的作业,小电电 批阅。
3#
发表于 2014-3-19 13:01:38 | 只看该作者
听校长的,通过
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 08:26 , Processed in 0.105049 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表