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

文章翻譯 文章翻譯
文章編號: 304662 - 檢視此文章適用的產品。
本文章的有 Microsoft Visual Basic.NET] 版本請參閱 304643
全部展開 | 全部摺疊

在此頁中

結論

您可能要顯示或內嵌直接在 Microsoft Visual C# 表單上的 Microsoft Office 文件。Microsoft Visual C# 2005年及 Microsoft Visual C#.NET 並不提供 OLE 控制項,可讓您將內嵌在表單上的 Office 文件。如果您想要內嵌現有的文件並開啟以就地 ActiveX 文件物件在 Visual C# 表單,用於您潛在的方案是使用 Microsoft WebBrowser 控制項。

本篇文章示範如何瀏覽至現有的 Office 文件,以及如何使用 WebBrowser 控制項來顯示 Visual C# 表單內。

其他相關資訊

ActiveX 文件是內嵌的行為會比較接近 [ActiveX 控制項比傳統的 OLE 物件的 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 的系統上。

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

如果要建立 Visual C# 應用程式,以開啟 Office 文件,請依照下列步驟執行:
  1. 在 Visual C# 2005年或 Visual C#.NET,請建立新的 Windows 應用程式專案。預設會建立 Form1。

    附註在 Visual C# 2005 中, 如果找不到 SHDocVw.dll 檔案或 AxSHDocVw.dll 檔案,執行下列命令在 Visual Studio 命令提示字元:
    aximp %WINDIR%\system32\shdocvw.dll
    然後,建立通用語言執行階段 Proxy (SHDocVw.dll) 和 Microsoft 網頁瀏覽器控制項一個 Windows Form Proxy (AxSHDocVw.dll)。若要在 Visual C# 2005年中加入 DLL 檔案,請依照下列步驟執行:
    1. 在 [專案] 功能表上按一下 [加入參考]。
    2. 在 [加入參考] 對話方塊中,按一下 [瀏覽]。
    3. 找出並選取 AxSHDocVw.dll 檔案和 SHDocVw.dll 檔案。
    4. 若要新增這兩個檔案的專案參考,按一下 [確定]
  2. 按一下 [工具] 功能表 自訂工具箱],以開啟 [自訂工具箱] 對話方塊。在 [COM 元件] 索引標籤上將參考加入 Microsoft WebBrowser。按一下 [若要將 WebBrowser 控制項加入至 Windows Form 工具箱的 [確定]。WebBrowser 控制項會以文字 檔案總管 在工具箱中顯示。

    附註在 Visual 的 Studio 2005 中您不必進行步驟 2。
  3. 使用工具箱,將 WebBrowser 控制項、 未 OpenFileDialog] 控制項和命令按鈕控制項加入 Form1。如此會將 AxWebBrowser1]、 [OpenFileDialog1,] 和 [Button1] 成員變數加入 Form1 類別。在 Visual C# 2005 中, 會加入 webBrowser1openFileDialog1button1 成員變數。
  4. 在 Form1 上, 按兩下 [Button1]。如此會將 Button1_Click 事件加入 Form1。
  5. 在 Form1 的程式碼] 視窗中將下列命名空間加入至清單:
    using System.Reflection;
    					
  6. 在類別 Form1 中定義私用成員,如下所示:
    private Object oDocument; 
  7. 類別 Form1 的 [InitializeComponent 方法結尾加入下列程式碼,以處理 Form1_LoadForm1_ClosedaxWebBrowser1_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 中的。預設情況下,Visual C# 將一表單加入專案建立 Windows Form 專案時。表單名為 Form1。代表表單的兩個檔案被命名 Form1.cs 和 Form1.designer.cs。Form1.cs 中撰寫程式碼。Form1.designer.cs 檔案是其中 Windows Form 設計工具寫入程式碼會實作所有動作您執行藉由拖放控制項從 [工具箱]。

    如需有關 Windows Form 設計工具在 Visual C# 2005年中的詳細資訊,請造訪下列 Microsoft 開發人員網路 MSDN 網站:
    http://msdn2.microsoft.com/en-us/library/ms173077.aspx
  9. 請按 F5 執行專案。當您按一下 [瀏覽 時,開啟舊檔] 對話方塊隨即出現,並可讓您瀏覽至 Word 文件]、 [Excel 工作表] 或 [PowerPoint 簡報。選取 [任何檔案,然後按一下 [開啟舊檔]。文件會開啟 WebBrowser] 控制項內部,並顯示 Office 文件伺服器名稱的訊息方塊隨即出現。

要考慮當您使用 WebBrowser 控制項什麼

當您使用 WebBrowser 控制項時,您應該考慮下列:
  • 瀏 WebBrowser 控制項覽文件以非同步的方式。當您呼叫 WebBrowser1.Navigate 時,呼叫會傳回給您 Visual C# 應用程式 之前,先 在文件的控制項已完全載入。如果想上自動執行包含的文件,需要使用 NavigateComplete2 事件以文件已完成載入時收到通知。使用 WebBrowser 物件取得 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 工作表) 載入每個控制項。Microsoft 建議您只有一個控制用於每個專案,並一次瀏覽至一份文件。

    最常見的問題是出在 Microsoft Office 命令列會顯示已停用。如果您將相同表單上的兩個 WebBrowser 控制項這兩種都載入 Word 文件,且如果您有使用上述技術之一,以顯示工具列,只有一組工具列為作用中並且正常運作。其他已停用,而且無法使用。
  • 若要清除 WebBrowser 控制的目前內容,另一個指令按鈕的 Click 事件中 (或是在您的程式碼中有些其他適當位置),瀏覽到預設的空白網頁使用下列程式碼:
       AxWebBrowser1.Navigate("about:blank");
    					

要考慮當您使用 WebBrowser 控制項搭配 2007 Microsoft Office 程式什麼

預設情況下,2007 Office 程式不要開啟 Office 文件在 Web 瀏覽器中。這個行為也會影響 WebBrowser 控制項。我們建議您在使用自訂的 ActiveX 文件容器代替 WebBrowser 控制項開發應用程式開啟的 2007 Office 文件時。如更多有關自訂 ActiveX 文件容器,按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
311765視覺化的 C + + ActiveX 控制項來裝載 (Host) 在 Visual Basic 或 HTML 的 Office 文件
對於需要與 WebBrowser 控制項回溯相容性的現有應用程式,您可以修改登錄以設定 Internet Explorer。您可以使用這個方法來設定以在網頁瀏覽器中開啟 2007 Office 文件的 Internet Explorer。如需詳細資訊,請按一下下列的文件編號,檢視 「 Microsoft 知識庫 」 中的文件:
927009當您嘗試在 Windows 網際網路總管 7 中檢視 2007 Microsoft Office 程式的文件時,便會開啟新視窗
附註如果您使用 Microsoft 知識庫 」 文件 927009 所述的方法修改登錄,所做的變更會影響您在應用程式中使用的 WebBrowser 控制項。所做的變更也會影響所有 Internet Explorer 的執行個體。此外,這個方法可能不適用於任何未來版本的 Microsoft Office 套件。因此,我們建議您只對與現有的應用程式的相容性使用這個方法。

?考

如需有關使用 WebBrowser 控制項的資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
304562Visual Studio 2005 及 Visual Studio.NET 並不會提供的 Windows Form OLE 容器控制項
243058如何使用 WebBrowser 控制項來開啟 Office 文件
162719如何使用 WebBrowser 控制項從 Visual Basic 5.0
202476注意: 無法編輯 OLE 或 WebBrowser 控制項中的 Word 文件
188271如何從 VB 列印網頁瀏覽器控制項的內容
191692Shdocvw.dll 也不會包含在 PDW 安裝套件
238313從 Visual Basic 存取 Internet Explorer 文件物件模型
927009當您嘗試在 Windows 網際網路總管 7 中檢視 2007 Microsoft Office 程式的文件時,便會開啟新視窗

屬性

文章編號: 304662 - 上次校閱: 2007年9月14日 - 版次: 9.1
這篇文章中的資訊適用於:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
關鍵字:?
kbmt kbactivedocs kbautomation kbhowto kbwebbrowser KB304662 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:304662
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com