• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

如何使用VisualC#.NET处理Excel事件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

http://kb.cnblogs.com/a/354521/

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,然后关闭窗体以结束调试会话。
 

命名空间已经包含了“Excel”的定义



如果没有安装用于 Excel 的主互操作程序集 (PIA),则会收到此错误消息。要解决此问题,请按照下列步骤操作:
1. 运行 Microsoft Office 安装程序,然后安装 Excel PIA。在 Office 安装程序中,PIA 显示为 Excel 下的一个组件“.NET 可编程性支持”。
2. 打开您的项目,删除对 Excel 互操作程序集的引用,然后重复本文“创建 Visual C# .NET 自动化客户端”部分中的步骤 2,以正确地引用 PIA。
测试该代码时,您可能会收到以下错误消息:

未处理的“System.InvalidCastException”类型的异常出现在 interop.excel.dll 中。
其他信息:不支持此种接口

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#创建WebApi项目发布时间:2022-07-14
下一篇:
C#学习之按钮点击事件发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap