通过使用 VisualC # .NET 为 Excel 处理事件
概要
本文介绍如何处理从自动化客户端是使用 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