电竞比分网-中国电竞赛事及体育赛事平台

分享

WebBrowser打開Word文檔的一些注意事項

 獨孤求財 2012-10-31

WebBrowser打開Word文檔的一些注意事項

分類: C# word 2999人閱讀 評論(3) 收藏 舉報
WebBrowser打開Word文檔的一些注意事項
2009年09月27日 星期日 17:37

忙乎了多日,終于將WebBrowser中Word工具欄中搞定

    在題庫管理系統(tǒng)中,需要將試題顯示出來,并進行編輯。于是,每道題都存儲為一個Word文件,并保存在SQL Server中,在瀏覽試題庫時,用WebBrowser控件顯示試題是最好的方法,有直觀的Word操作界面,也為試題保存提供了方便。
    一開始是使用VS 2005中內(nèi)建的Web Browser控件來顯示。顯示正常,但很快帶來兩個問題:
    1、默認打開時是有“審閱”工具欄,如何在剛打開時就具有“常用”工具欄。
    2、沒有辦法找到對應的文檔對象,以控制Word文件的保存。
    在網(wǎng)上搜了一大堆,都是提到要使用COM對象axWebBrowser控件,包括MSDN上的這篇文章:“如何使用 WebBrowser 控件在 Visual C# 2005 或 Visual C# .NET 中打開 Office 文檔”(http://support.microsoft.com/kb/304662/zh-cn)
   
    第一步:添加axWebBrowser控件到工具箱。
    在工具箱上,單擊右鍵,使用選擇項,在COM組件中找到“Microsfot Web Browser”項,確定即可。

    第二步,向窗體上添加“Microsfot Web Browser”控件,這個地方命名為wbDocView

    第三步,需要使用WebBrowser控件加載Word文檔時,使用以下語句:
    wbDocView.Nagivate(yourfilename);

    遇到的第一個問題:打開第一個文件時可以,再次打開同一文件時,由于文件仍屬性于打開狀態(tài),無法再次打開。窗體關(guān)閉時并不會主動關(guān)閉該文件,它要等到整個程序退出時才釋放資源。
    解決辦法:在窗體的FormClosing事件中,使用下列語句關(guān)閉文件:
    wbDocView.Navigate("about:blank");

    解決第二個問題,打開Word文件時,顯示常用工具欄。MSDN 304662中介紹的是:
    Object refmissing = System.Reflection.Missing.Value;
    oDocument = null;
    axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
    我按照同樣的方法做時,總是出現(xiàn)“試圖吊銷一個未注冊的拖放目標 (異常來自 HRESULT:0x80040100 (DRAGDROP_E_NOTREGISTERED))”的錯誤。很長時間不能解決。
    后來,在WebBrowser控件的NavigateComplete2事件中寫入以下代碼:
    axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
    果然,“審閱”工具欄不再出現(xiàn)了,取而代之的是有“常用”、“字體”和“繪圖”三個工具欄。暫時不管它了,以后再深入研究。

    解決第三個問題:適當?shù)臅r候如何保存Word文件?
    同樣,在NavigateComplete2事件中,寫入以下代碼以獲取Document對象。
    object o = e.pDisp;
    oDocument = o.GetType().InvokeMember("Document", System.Reflection.BindingFlags.GetProperty, null, o, null);
    這里的oDocument是定義在窗體類中的一個私有字段:object oDocument = null;
    接下來,在“保存”按鈕的Click事件中,用以下代碼:(此時需要引入Office類庫)
    object missing = System.Reflection.Missing.Value;
    Microsoft.Office.Interop.Word.DocumentClass doc = oDocument as Microsoft.Office.Interop.Word.DocumentClass;
    doc.Save();
    此時,窗體上的WebBrowser控件會處于假死狀態(tài),這時重新加載這個文件就可以了:
    wbDocView.Navigate(wbDocView.LocationURL);
    雖然加載過程會有明顯的停頓與閃爍,但暫時不管它了。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多