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】代码:
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;
}
}
}
}
复制代码
[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