** 演练:在 Excel 中拦截事件 **
Ken Getz
MCW Technologies
September 2003
Applies to:
Microsoft® Visual Studio® Tools for the Microsoft Office System
Microsoft Office Excel 2003
Microsoft Visual Studio .NET 2003
** 概述 ** :微软的 Visual Studio Toos 很容易就能把微软的 Excel 2003 调用的事件整合在托管代码中。本演练示范了 Excel 的 Application 对象调用的 SheetFollowHyperlink 事件的响应。
内容
介绍
必要条件
开始
处理文档
处理事件
增加事件代码并测试
结论
介绍
这篇演练中你将使用 Visual Studio .NET 提供的工具和 Office System 的 Visual Studio 工具建立一篇新的 Excel 2003 文档。你将增加代码来响应 Excel 中 Application 对象中的 SheetFollowHyperlink 事件,当你点击此链接时建立新的工作表。
必要条件
为完成本次演练,下列软件和组件必须安装在计算机上:
• Microsoft Visual Studio .NET 2003 or Microsoft Visual Basic® .NET Standard 2003
• Microsoft Visual Studio Tools for the Microsoft Office System
• Microsoft Office Professional Edition 2003
开始
为了开始,你需要建立一个与 Office Excel 2003 协作的 Visual Studio .NET 项目。
建立一个 Excel 工作簿项目
1. 开始 Visual Studio .NET ,点击文件菜单,指向新建,接着点击项目。
2. 在项目类型面板中,扩展微软 Office System 项目,选择 Visual Basic 项目或者是 Visual C # 项目。
3. 在模板面板中,选择 Excel 工作簿。
4. 命名为 ExcelEvent ,接着存储在当地硬盘中。
5. 接受微软 Office 项目向导的缺省值,点击完成建立新的 Excel 工作簿项目。
Visual Studio .NET 在代码编辑器中为你打开 ThisDocument.vb 或者是 ThisDocument.cs 文件。
向导使用两个文件存储解决方案:
Ø AssemblyInfo.vb 或者是 AssemblyInfo.cs 存储汇编级元数据。
Ø ThisWorkbook.vb 或者是 ThisWorkbook.cs 保存响应 Excel 事件的代码。
处理文档
为了示范 SheetFollowHyperlink 事件并建立新的工作簿,你需要在此工作簿中增加新的超级链接,按以下步骤操作:
在此文档中增加超级链接
1. 按 F5 运行项目,装入 Excel 和新的工作簿。
2. 在 Excel 中,将光标放在 A1 单元格,选择插入菜单中的超级链接。
3. 打开插入超级链接对话框,点击左边面板中的链接到,选择放置在本文挡。
4. 设置显示文本值为建立新的工作簿。
5. 确保单元格引用和你的超级链接的位置相匹配,当你做完之后,对话框如图一所示:
图一:完成后的插入超级链接对话框
6. 点击 OK 关闭对话框,你将看到在工作簿中新建的超级链接。
7. 选择文件菜单中的保存来保存工作簿。
8. 关闭 Excel 返回到 Visual Studio .NET
处理事件
由 Visual Studio .NET 建立的 OfficeCodeBehind 类允许你简单的增加代码到现存的程序中就可以处理文档的 Open 和 BeforeClose 事件。在本次练习中,你将写代码来响应事件模板代码还没有处理的事件―― SheetFollowHyperlink 。你将增加事件程序,拦截事件处理,并响应该事件。根据你的编程语言选择不同的片断。
事件处理( Visual Basic )
为了是你的代码运行,你需要响应 Application.SheetFollow.Hyperlink 事件。在这篇中你增加代码来响应此事件。
增加事件处理( Visual Basic )
1. 在代码编辑器的左上角类名下拉列表框中选择 ThisApplication 。
2. 在右上角的方法名下拉列表框中选择 SheetFollowHyperlink 。
Visual Studio .NET 建立的时间代码片断如下所示:
' Visual Basic Private
Sub ThisApplication_SheetFollowHyperlink( _
ByVal Sh As Object, _
ByVal Target As Microsoft.Office.Interop.Excel.Hyperlink) _
Handles ThisApplication.SheetFollowHyperlink
End Sub
处理事件( C #)
为了是你的 C #代码运行,你需要响应 Application.WindowDeactivate 事件,在本段中,你需要增加代码来响应这一事件,虽然由 Visual Studio .NET 模板建立的代码使用稍微有点复杂的代码来拦截这个事件,本端中的步骤使用简单的技术来增加事件处理。
增加事件处理( C #)
1. 增加下列程序片断到 Visual Studio .NET 建立的 OfficeCodeBehind 类中:
// C#
protected void ThisApplication_SheetFollowHyperlink( Object Sh, Excel.Hyperlink Target) { }
2. 在 ThisWorkbook_Open 程序,输入下列代码。一旦你输入了本段代码,你将会看到 ToolTip 。按 TAB 键,根据 ToolTip 的指示完成代码行:
// C#
thisApplication.SheetFollowHyperlink += // Once you've finished, the code will look like this, wrapped // to fit this space: ThisApplication.SheetFollowHyperlink += new Microsoft.Office.Interop.Excel. AppEvents_SheetFollowHyperlinkEventHandler( ThisApplication_SheetFollowHyperlink);
增加事件代码并测试
一旦你设置了事件处理,你就能增加代码来响应事件。下面这些步骤将建立一个新的工作簿,并保持焦点在原先的工作簿中。
增加代码建立新的工作簿
1. 修改 ThisApplication_SheetFollowHyperlink 程序如下所示:
' Visual Basic
Private Sub ThisApplication_SheetFollowHyperlink( _
ByVal Sh As Object, _
ByVal Target As Microsoft.Office.Interop.Excel.Hyperlink) _ Handles ThisApplication.SheetFollowHyperlink Dim ws As Excel.Worksheet = _
DirectCast(ThisApplication.ActiveSheet, Excel.Worksheet) ThisWorkbook.Sheets.Add() ws.Activate()
End Sub
// C#
protected void ThisApplication_SheetFollowHyperlink( Object Sh, Excel.Hyperlink Target)
{
Excel.Worksheet ws = (Excel.Worksheet)ThisApplication.ActiveSheet; ThisApplication.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing); ws.Activate();
}
注意 Worksheets.Add 方法接受四个参数,表示新工作簿插入的地方,增加的工作表号,增加对象的类型。如果你没有定义这些参数, Excel 增加一个单独的新工作表作为本工作簿第一个工作表。在 Visual Basic For Applications 和 Visual Baisc .NET 中,你可以简单的不传递这些参数, Excel 做其余的事情。可是, C #不支持选项参数。为了表示你想要 Excel 做正确的行为,传递 Type.Missing 给每一个参数。
2. 选择文件菜单中的保存所有文件来保存你的整个方案。
3. 按 F5 运行此项目。这将装入 Excel 和你建立的文档。
4. 点击超级链接,效验 Excel 建立新的工作表。尝试多建立一些工作表以效验事件处理程序的工作。
5. 退出 Excel 并返回 Visual Studio .NET 。
结论
在本演练中,你将能使用 ExcelApplication 对象中的 SheetFollowHyperlink 事件建立新的工作表。使用微软 Office System 的 Visual Studio Tools 使你能容易的将微软 Office Excel 2003 对象调用的事件和托管代码整合起来。