如何使用 Visual C# .NET 處理 Excel 事件

來源:互聯網
上載者:User

標籤:style   http   color   io   os   使用   ar   for   檔案   

事件處理概述 
Visual C# .NET 使用委派處理來自元件物件模型 (COM) 伺服器的事件。委派是 Microsoft Visual Studio .NET 中的一個新概念。對於 COM 事件,委派是一種特殊對象,它偵聽來自 COM 伺服器的事件,然後將其轉寄給 Visual C# 函數。要使用委派,必須建立對象的執行個體,然後將該對象執行個體添加到要偵聽的事件中。每個事件都有一個委派,該委派專門設計用於將 COM 事件(使用本機資料類型)轉換為標準 Microsoft .NET 調用(使用管理的資料類型)。

建立 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 的主要 Interop 組件 (PIA),則會收到此錯誤訊息。要解決此問題,請按照下列步驟操作:1. 運行 Microsoft Office 安裝程式,然後安裝 Excel PIA。在 Office 安裝程式中,PIA 顯示為 Excel 下的一個組件“.NET 可程式化性支援”。 
2. 開啟您的項目,刪除對 Excel Interop 組件的引用,然後重複本文“建立 Visual C# .NET 自動化用戶端”部分中的步驟 2,以正確地引用 PIA。 
測試該代碼時,您可能會收到以下錯誤訊息:
未處理的“System.InvalidCastException”類型的異常出現在 interop.excel.dll 中。
其他資訊:不支援此種介面
有關此錯誤訊息的其他資訊,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章: 
316653 (http://support.microsoft.com/kb/316653/) PRB:使用 WithEvents 或委派從 Visual Basic .NET 或 Visual C# .NET 處理 Excel 事件時出現錯誤 
 回到頂端參考
有關其他資訊,請訪問下面的 Microsoft Developer Network (MSDN) 網站: 
http://msdn.microsoft.com/library/en-us/dnoxpta/html/vsofficedev.asp(http://msdn.microsoft.com/library/en-us/dnoxpta/html/vsofficedev.asp)有關在 Visual C# .NET 中實現 Excel 自動化的其他資訊,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章: 
302084 (http://support.microsoft.com/kb/302084/) 如何在 Microsoft Visual C# .NET 中實現 Microsoft Excel 自動化 
302096 (http://support.microsoft.com/kb/302096/) 如何在 Visual C# .NET 中使 Excel 自動運行以使用數組填充或擷取某個地區中的資料 
302902 (http://support.microsoft.com/kb/302902/) 用 Visual C# 進行 Office Automation 伺服程式的綁定 

如何使用 Visual C# .NET 處理 Excel 事件

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.