http://support.microsoft.com/kb/823981/zh-cn
概要
本文分步介绍了如何从使用 Visual C# .NET 开发的自动化客户端处理 Microsoft Excel 事件。
创建 Visual C# .NET 自动化客户端
要使用委派从使用 Visual C# .NET 开发的自动化客户端处理 Excel 事件,请按照下列步骤操作:
1. |
启动 Visual Studio .NET 2002 或 Visual Studio .NET 2003。在“文件”菜单上,单击“新建”,然后单击“项目”。在“Visual C# 项目”下,选择“Windows 应用程序”。将项目命名为 XLEventTest,然后单击“确定”。
默认情况下会创建 Form1。 |
2. |
添加对“Microsoft Excel 对象库”的引用。为此,请按照下列步骤操作:
a. |
在“项目”菜单上,单击“添加引用”。 |
b. |
在“COM”选项卡上,找到“Microsoft Excel 11.0 对象库”,然后单击“选择”。 |
c. |
在“添加引用”对话框中单击“确定”,接受您的选择。如果系统提示您为选定的库生成包装,请单击“是”。 |
|
3. |
在解决方案资源管理器中,双击“Form1.cs”以在“设计”视图中显示该窗体。 |
4. |
在“视图”菜单上,单击“工具箱”以显示工具箱,然后向 Form1 中添加一个按钮。将该按钮的“Text”属性更改为启动 Excel。 |
5. |
双击“启动 Excel”以显示该窗体的“代码”窗口。将以下代码添加到该按钮的 Click 事件处理程序中: private void button1_Click(object sender, System.EventArgs e)
{
StartExcelAndSinkEvents();
}
|
6. |
在靠近文件顶部、另一个 using 语句下方添加以下代码: using System.Reflection;
using System.Diagnostics;
using Excel = Microsoft.Office.Interop.Excel;
|
7. |
将以下代码添加到 Form1 类中,使其位于步骤 5 中的 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 StartExcelAndSinkEvents()
{
//Start Excel, and then create a new workbook.
xlApp = new Excel.Application();
xlBook = xlApp.Workbooks.Add( Missing.Value );
xlBook.Windows.get_Item(1).Caption = "XL Event Test";
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 )
{
//This is called when any cell on a worksheet is 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 the 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;
}
|
测试代码
1. |
按 Ctrl+Alt+O 以显示“输出”窗口。 |
2. |
按 F5 生成并运行该程序。 |
3. |
在窗体上,单击“启动 Excel”按钮。
程序将启动 Excel,然后创建一个具有三张工作表的工作簿。 |
4. |
向任一张工作表的单元格中添加任意数据。
查看 Visual Studio 中的“输出”窗口,以确认调用了事件处理程序。 |
5. |
退出 Excel,然后关闭窗体以结束调试会话。 |
请发表评论