1. 程式人生 > >如何使用 WebBrowser 控制元件在 Visual C# 2005 或 Visual C# .NET 中開啟 Office 文件

如何使用 WebBrowser 控制元件在 Visual C# 2005 或 Visual C# .NET 中開啟 Office 文件

 

如何使用 WebBrowser 控制元件在 Visual C# 2005 或 Visual C# .NET 中開啟 Office 文件

察看本文應用於的產品

本文的釋出號曾為 CHS304662 有關本文的 Microsoft Visual Basic .NET 版本,請參閱 304643  (http://support.microsoft.com/kb/304643/ )

您可能希望直接在 Microsoft Visual C# 窗體中顯示或嵌入 Microsoft Office 文件。Microsoft Visual C# 20...
您可能希望直接在 Microsoft Visual C# 窗體中顯示或嵌入 Microsoft Office 文件。Microsoft Visual C# 2005 和 Microsoft Visual C# .NET 不提供用於在窗體中嵌入 Office 文件的 OLE 控制元件。如果希望嵌入現有文件並將其作為 Visual C# 窗體內的就地 ActiveX 文件物件開啟,一個可能的解決方案是使用 Microsoft WebBrowser 控制元件。

本文闡述如何使用 WebBrowser 控制元件在 Visual C# 窗體內瀏覽到現有 Office 文件並顯示它。

更多資訊

ActiveX 文件是比傳統 OLE 物件更像 ActiveX 控制元件的可嵌入 OLE 物件。與傳統嵌入物件不同的是,ActiveX 文件不是作為更大文件中所包含... ActiveX 文件是比傳統 OLE 物件更像 ActiveX 控制元件的可嵌入 OLE 物件。與傳統嵌入物件不同的是,ActiveX 文件不是作為更大文件中所包含的物件而設計的。其本身可以算作是僅供檢視(如用 Microsoft Internet Explorer 檢視)或是與其他文件(如 Microsoft Office 活頁夾檔案)一起集中到單個資源的完整文件。WebBrowser 控制元件中承載的 ActiveX 文件始終是活動的;因此,與傳統的 OLE 嵌入物件不同,無需就地啟用。

儘管 Visual C# 2005 和 Visual C# .NET 當前不支援直接承載 ActiveX 文件,但您可以使用 WebBrowser 控制元件來實現此目的。WebBrowser 控制元件 (Shdocvw.dll) 是 Internet Explorer 的一部分,並且只能在安裝了 Internet Explorer 的系統上使用。

建立可開啟 Office 文件的 Visual C# 應用程式

要建立可開啟 Office 文件的 Visual C# 應用程式,請按照下列步驟操作:
  1. 在 Visual C# 2005 或 Visual C# .NET 中新建一個 Windows 應用程式專案。預設情況下建立 Form1。

    注意:在 Visual C# 2005 中,如果您找不到 SHDocVw.dll 檔案或 AxSHDocVw.dll 檔案,請在 Visual Studio 命令提示符下執行下面的命令:
    aximp %WINDIR%/system32/shdocvw.dll
    然後,為 Microsoft WebBrowser 控制元件建立公共語言執行庫代理 (SHDocVw.dll) 和 Windows 窗體代理 (AxSHDocVw.dll)。若要在 Visual C# 2005 中新增 DLL 檔案,請按下列步驟操作:
    1. 在“專案”選單上,單擊“新增引用”。
    2. 在“新增引用”對話方塊中,單擊“瀏覽”。
    3. 找到並選擇 AxSHDocVw.dll 和 SHDocVw.dll 檔案。
    4. 若要為這兩個檔案新增專案引用,請單擊“確定”。
  2. 在“工具”選單上,單擊“自定義工具箱”以開啟“自定義工具箱”對話方塊。在“COM 元件”選項卡上,新增一個對“Microsoft WebBrowser”的引用。單擊“確定”,將 WebBrowser 控制元件新增到 Windows 窗體工具箱。WebBrowser 控制元件會顯示出來,並且在工具箱中帶有“Explorer”(資源管理器)字樣。

    注意:在 Visual Studio 2005 中,不必執行步驟 2。
  3. 使用該工具箱向 Form1 新增一個 WebBrowser 控制元件、一個 OpenFileDialog 控制元件和一個 CommandButton 控制元件。這就會向 Form1 類新增“AxWebBrowser1”、“OpenFileDialog1”和“Button1”成員變數。在 Visual C# 2005 中,會新增“webBrowser1”、“openFileDialog1”和“button1”成員變數。
  4. 在 Form1 上,雙擊“Button1”。這就會向 Form1 新增”Button1_Click”事件。
  5. 在 Form1 的程式碼視窗中,向列表新增以下名稱空間:
    using System.Reflection;
    					
  6. 如下所示在 Form1 類中定義一個私有成員:
    private Object oDocument; 
  7. 在 Form1 類的“InitializeComponent”方法的末尾,新增以下程式碼以處理“Form1_Load”、“Form1_Closed”和“axWebBrowser1_NavigateComplete2”事件:
    this.axWebBrowser1.NavigateComplete2 += new AxSHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(this.axWebBrowser1_NavigateComplete2);
    this.Load += new System.EventHandler(this.Form1_Load);
    this.Closed += new System.EventHandler(this.Form1_Closed);
    					
  8. 將下面的程式碼
    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    					
    替換為:
    private void button1_Click(object sender, System.EventArgs e)
    {
    
     String  strFileName;
    
     //Find the Office document.
     openFileDialog1.FileName = "";
     openFileDialog1.ShowDialog();
     strFileName = openFileDialog1.FileName;
    	        
     //If the user does not cancel, open the document.
     if(strFileName.Length != 0)
     {
      Object refmissing = System.Reflection.Missing.Value;
      oDocument = null;
      axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
     }
    }
    
    public void Form1_Load(object sender, System.EventArgs e)
    {
     button1.Text = "Browse";
     openFileDialog1.Filter = "Office Documents(*.doc, *.xls, *.ppt)|*.doc;*.xls;*.ppt" ;
     openFileDialog1.FilterIndex = 1;
    }
    
    public void Form1_Closed(object sender, System.EventArgs e)
    {
     oDocument = null;
    }
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
    
     //Note: You can use the reference to the document object to 
     //      automate the document server.
    
     Object o = e.pDisp;
       
     oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
    			
     Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
    
     Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);
    
     MessageBox.Show("File opened by: " + oName.ToString() ); 
    }
    					
    注意:您必須在 Visual Studio 2005 中更改此程式碼。預設情況下,當您建立 Windows 窗體專案時,Visual C# 向該專案新增一個窗體。該窗體被命名為 Form1。表示該窗體的兩個檔案被命名為 Form1.cs 和 Form1.designer.cs。您在 Form1.cs 中編寫程式碼。Windows 窗體設計器在 Form1.designer.cs 檔案中編寫程式碼,這些程式碼實現通過從工具箱拖放控制元件所執行的所有操作。

    有關 Visual C# 2005 中 Windows 窗體設計器的更多資訊,請訪問下面的 Microsoft Developer Network (MSDN) 網站: http://msdn2.microsoft.com/zh-cn/library/ms173077.aspx (http://msdn2.microsoft.com/zh-cn/library/ms173077.aspx)
  9. 按 F5 執行該專案。單擊“瀏覽”後,會出現“開啟”對話方塊,您可以使用該對話方塊瀏覽到 Word 文件、Excel 工作表或 PowerPoint 簡報。選擇任一檔案,然後單擊“開啟”。文件在 WebBrowser 控制元件內開啟,並出現一個顯示 Office 文件伺服器名稱的訊息框。
回到頂端

使用 WebBrowser 控制元件的注意事項

使用 WebBrowser 控制元件時應考慮以下幾點:
  • WebBrowser 控制元件非同步瀏覽到文件。在呼叫“WebBrowser1.Navigate”時,該呼叫會在文件完全載入之前將控制權返回給 Visual C# 應用程式。如果您打算為所包含的文件實現自動操作,則必須使用“NavigateComplete2”事件在文件完成載入後發出通知。使用傳入的“WebBrowser”物件的“Document”屬性可獲得對 Office 文件物件的引用,在前面的程式碼中,該物件被設定為“oDocument”。
  • WebBrowser 控制元件不支援選單合併。
  • 在 Internet Explorer 版本 5.0 和更高版本中,可以使用以下程式碼顯示停靠工具欄:
     // This is a toggle option, so call it once to show the 
     // toolbars and once to hide them. This works with Internet Explorer 5
     // but often fails to work properly with earlier versions.
     
     Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
    					
  • 幾個已知問題:在一個專案中有多個 WebBrowser 控制元件並且每個控制元件都載入有相同型別的 Office 文件(即,全部都是 Word 文件或者全部都是 Excel 工作表)。建議一個專案只使用一個控制元件,並且一次只瀏覽到一個文件。

    最常見的問題發生在 Office 命令欄上(命令欄會被禁用)。如果同一個窗體上有兩個 WebBrowser 控制元件,且兩個控制元件都載入有 Word 文件,而您使用了前面某一種技術顯示了工具欄,那麼只有一組工具欄會是活動的,且只有該工具欄能正常工作。另外一個則被禁用,無法使用。
  • 若要清除 WebBrowser 控制元件的當前內容,請在另一個命令按鈕的“Click”事件中(或在程式碼中的其他某個適當位置),使用下面的程式碼瀏覽到預設空白頁:
       AxWebBrowser1.Navigate("about:blank");
    					
回到頂端

將 WebBrowser 控制元件與 2007 Microsoft Office 程式一起使用時的注意事項

預設情況下,2007 Office 程式不會在 Web 瀏覽器中開啟 Office 文件。這種行為也會影響 WebBrowser 控制元件。我們建議您在開發用於開啟 2007 Office 文件的應用程式時使用自定義 ActiveX 文件容器,而不要使用 WebBrowser 控制元件。 有關自定義 ActiveX 文件容器的更多資訊,請單擊下面的文章編號,以檢視 Microsoft 知識庫中相應的文章: 311765  (http://support.microsoft.com/kb/311765/ ) Visual Basic 或 HTML 中承載 Office 文件的 Visual C++ ActiveX 控制元件 對於要求與 WebBrowser 控制元件實現向後相容的現有應用程式,可以更改登錄檔來配置 Internet Explorer。可以使用此方法來配置 Internet Explorer 以便在 Web 瀏覽器中開啟 2007 Office 文件。 有關更多資訊,請單擊下面的文章編號,以檢視 Microsoft 知識庫中相應的文章: 927009  (http://support.microsoft.com/kb/927009/ ) 嘗試在 Windows Internet Explorer 7 中檢視 2007 Microsoft Office 程式文件時會開啟一個新的視窗 注意:如果使用 Microsoft 知識庫文章 927009 中提及的方法更改登錄檔,則更改會影響您在應用程式中使用的 WebBrowser 控制元件。更改還會影響所有 Internet Explorer 例項。此外,對未來版本的 Microsoft Office 套件,該方法可能不再適用。因為,我們建議您僅將此方法用於對現有應用程式的相容。 回到頂端

參考

有關使用 WebBrowser 控制元件的更多資訊,請單擊下面的文章編號,以檢視 Microsoft 知識庫中的相應文章: 304562  (http://supp... 有關使用 WebBrowser 控制元件的更多資訊,請單擊下面的文章編號,以檢視 Microsoft 知識庫中的相應文章: 304562  (http://support.microsoft.com/kb/304562/ ) Visual Studio 2005 和 Visual Studio .NET 不為 Windows 窗體提供 OLE 容器控制元件 243058  (http://support.microsoft.com/kb/243058/ ) 如何使用 WebBrowser 控制元件開啟 Office 文件 162719  (http://support.microsoft.com/kb/162719/ ) 如何通過 Visual Basic 5.0 使用 WebBrowser 控制元件 202476  (http://support.microsoft.com/kb/202476/ ) BUG:無法在 OLE 或 WebBrowser 控制元件中編輯 Word 文件 188271  (http://support.microsoft.com/kb/188271/ ) 如何從 VB 列印 Web 瀏覽器控制元件的內容 191692  (http://support.microsoft.com/kb/191692/ ) PRB:Shdocvw.dll 未包含在 PDW 安裝程式包中 238313  (http://support.microsoft.com/kb/238313/ ) PRB:從 Visual Basic 訪問 Internet Explorer 文件物件模型 927009  (http://support.microsoft.com/kb/927009/ ) 嘗試在 Windows Internet Explorer 7 中檢視 2007 Microsoft Office 程式文件時會開啟一個新的視窗 回到頂端
這篇文章中的資訊適用於:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 標準版
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 標準版
  • Microsoft Excel 2000 標準版
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 標準版
  • Microsoft PowerPoint 2000 標準版
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2002 標準版
  • Microsoft Word 2000 標準版
回到頂端