通过使用 VisualC # .NET 为 Excel 处理事件

来源:微软  作者:微软
摘要:概要本文介绍如何处理从自动化客户端是使用 VisualC # .NET 开发 Excel 事件。回到顶端概述事件处理VisualC # .NET 使用委托来处理组件对象模型 (COM) 事件。委托是 VisualStudio.NET 中新概……

概要
本文介绍如何处理从自动化客户端是使用 VisualC # .NET 开发 Excel 事件。


回到顶端

概述事件处理
VisualC # .NET 使用委托来处理组件对象模型 (COM) 事件。委托是 VisualStudio.NET 中新概念。万一有 COM 事件, 委托侦听来自 COM 服务器, 事件并将它们转发到 VisualC # 函数。


回到顶端

创建 VisualC # .NET 自动化客户端
以下步骤演示如何使用委托来处理 Excel 事件是开发使用 VisualC # .NET 自动化客户端。1. 启动 MicrosoftVisualStudio.NET。在 文件 菜单上, 单击 新建 , 然后单击 项目 。Visual C# 项目 , 下选择 WindowsApplication@@@ 。默认情况下创建 Form 1。
2. 添加对 MicrosoftExcel 对象库 引用。要这样做, 请按照下列步骤操作: a.  在 项目 菜单上, 单击 AddReference 。
b.  在 COM 选项卡, 找到 Microsoft Excel 10.0 对象库 并单击 选择 如果您尚未操作, Microsoft 建议您下载并安装 Microsoft Office XP Primary Interop Assemblies (PIA), 备注 :。有关 OfficeXPPIA, 请单击文章编号以查看 Microsoft 知识库中相应:
328912 (http://support.microsoft.com/kb/328912/EN-US/) INFO: Microsoft OfficeXPPIA 可供下载 
c.  在 添加引用 对话框中单击 确定 以接受您选择。如果您提示以生成包装的库, 所选, 单击 是 。
 
3. 在 SolutionExplorer@@, 双击要在设计视图显示窗体 Form 1 。
4. 在 视图 菜单上, 选择 工具箱 以显示工具箱向 Form 1 添加一个按钮并。更改按钮的 Text 属性以 使用委托 。
5. 在 视图 菜单上, 选择 代码 以显示代码窗口用于窗体。以下代码添加到按钮的 Click 事件处理程序:private void button1_Click(object sender, System.EventArgs e)
{
   UseDelegates();
}
     
 
6. 添加下列代码下面按钮的 Click 事件处理程序://Excel Automation variables.
Excel.Application xlApp;
Excel.Workbook xlBook;
Excel.Worksheet xlSheet1, xlSheet2, xlSheet3;

//Excel event delegate variables.
Excel.AppEvents_WorkbookBeforeCloseEventHandler EventDel_BeforeBookClose;
Excel.DocEvents_ChangeEventHandler EventDel_CellsChange;
private void UseDelegates()
{
   //Start Excel and create a new workbook.
   xlApp = new Excel.ApplicationClass();
   xlBook = xlApp.Workbooks.Add( Missing.Value );
   xlBook.Windows.get_Item(1).Caption = "Uses Delegate";
   xlSheet1 = (Excel.Worksheet)xlBook.Worksheets.get_Item(1);
   xlSheet2 = (Excel.Worksheet)xlBook.Worksheets.get_Item(2);
   xlSheet3 = (Excel.Worksheet)xlBook.Worksheets.get_Item(3);
   xlSheet1.Activate();

//Add an event handler for the WorkbookBeforeClose Event of the
   //Application object.
   EventDel_BeforeBookClose =
    new Excel.AppEvents_WorkbookBeforeCloseEventHandler( BeforeBookClose);
   xlApp.WorkbookBeforeClose += EventDel_BeforeBookClose;

//Add an event handler for the Change event of both Worksheet objects.
   EventDel_CellsChange = new Excel.DocEvents_ChangeEventHandler( CellsChange);

xlSheet1.Change += EventDel_CellsChange;
   xlSheet2.Change += EventDel_CellsChange;
   xlSheet3.Change += EventDel_CellsChange;

//Make Excel visible and give the user control.
   xlApp.Visible = true;
   xlApp.UserControl = true;
}

private void CellsChange(Excel.Range Target )
{
   //Called when a cell or cells on a worksheet are changed.
   Debug.WriteLine("Delegate: You Changed Cells " +
    Target.get_Address( Missing.Value, Missing.Value,
    Excel.XlReferenceStyle.xlA1, Missing.Value, Missing.Value ) +
    " on " + Target.Worksheet.Name);
}

private void BeforeBookClose(Excel.Workbook Wb, ref bool Cancel )
{
   //This is called when you choose to close the workbook in Excel.
   //The event handlers are removed and then the workbook is closed
   //without saving changes.
   Wb.Saved = true;
   Debug.WriteLine("Delegate: Closing the workbook and removing event handlers.");
   xlSheet1.Change -= EventDel_CellsChange;
   xlSheet2.Change -= EventDel_CellsChange;
   xlSheet3.Change -= EventDel_CellsChange;
   xlApp.WorkbookBeforeClose -= EventDel_BeforeBookClose;
}    
     
 
7. 添加文件, 下面其他 使用 声明顶部附近如下代码:using System.Reflection;
using System.Diagnostics;
using Excel = Microsoft.Office.Interop.Excel;     

回到顶端

测试代码
1. 按 CTRL+ALT+O 组合键以显示输出窗口。
2. 按 F 5 键生成并运行程序。
3. 在窗体, 单击 使用委派 。程序启动 Excel 并创建工作簿具有三个工作表。
4. 向两个工作表上单元格添加任何数据。检查 VisualStudio 来验证调用事件处理程序中输出窗口。
5. 退出 Excel 并关闭表单来结束调试会话。

回到顶端

疑难解答
当您测试代码, 可能会收到以下错误信息:
发生无法处理 interop.excel.dll 中则 ' ' 类型的异常

信息不支持这些接口:
如果您收到此错误, 请参阅下列 Microsoft 知识库文章:
316653 (http://support.microsoft.com/kb/316653/EN-US/) PRB: 错误使用 WithEvents 或委托来处理 Excel 事件从 VisualBasic.NET 或 Visual C# .NET

【相关文章】好搜一下
基于ASP.NET的自定义分页显示

基于ASP.NET的自定义分页显示

摘要:本文针对WEB数据库记录的显示问题,用实例讨论了在ASP.NET框架下使用…