分类: C#word2010-03-31 21:26 5640人阅读 评论(3) 收藏 举报
WebBrowser打开Word文档的一些注意事项
2009年09月27日 星期日 17:37

忙乎了多日,终于将WebBrowser中Word工具栏中搞定

在题库管理系统中,需要将试题显示出来,并进行编辑。于是,每道题都存储为一个Word文件,并保存在SQL Server中,在浏览试题库时,用WebBrowser控件显示试题是最好的方法,有直观的Word操作界面,也为试题保存提供了方便。
    一开始是使用VS 2005中内建的Web Browser控件来显示。显示正常,但很快带来两个问题:
    1、默认打开时是有“审阅”工具栏,如何在刚打开时就具有“常用”工具栏。
    2、没有办法找到对应的文档对象,以控制Word文件的保存。
    在网上搜了一大堆,都是提到要使用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);

遇到的第一个问题:打开第一个文件时可以,再次打开同一文件时,由于文件仍属性于打开状态,无法再次打开。窗体关闭时并不会主动关闭该文件,它要等到整个程序退出时才释放资源。
    解决办法:在窗体的FormClosing事件中,使用下列语句关闭文件:
    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);
    我按照同样的方法做时,总是出现“试图吊销一个未注册的拖放目标 (异常来自 HRESULT:0x80040100 (DRAGDROP_E_NOTREGISTERED))”的错误。很长时间不能解决。
    后来,在WebBrowser控件的NavigateComplete2事件中写入以下代码:
    axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
    果然,“审阅”工具栏不再出现了,取而代之的是有“常用”、“字体”和“绘图”三个工具栏。暂时不管它了,以后再深入研究。

解决第三个问题:适当的时候如何保存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控件会处于假死状态,这时重新加载这个文件就可以了:
    wbDocView.Navigate(wbDocView.LocationURL);
    虽然加载过程会有明显的停顿与闪烁,但暂时不管它了。

转发自:http://blog.csdn.net/cqbsbjianxy/article/details/5438893

WebBrowser打开Word文档的一些注意事项的更多相关文章

  1. C#用Open与Add方法打开word文档的区别

    C#打开word文档常用有两种方法:Add与Open. Microsoft.Office.Interop.Word._Document doc = (Document)appWord.Document ...

  2. 使用Word API打开Word文档 ASP.NET编程中常用到的27个函数集

    使用Word API(非Openxml)打开Word文档简单示例(必须安装Word) 首先需要引入参照Microsoft.Office.Interop.Word 代码示例如下: public void ...

  3. 打开word文档总是自动弹出控件工具条的解决办法:

    打开word文档总是自动弹出控件工具条的解决办法:1.查看是否word文档和模板中了'apmp宏病毒,按ALT+F11组合键,双击当前文档下属的ThisDocument,清空里面的内容:双击Norma ...

  4. 打开WORD文档出错提示

    打开WORD文档出错提示: Microsoft Office Word 遇到问题需要关闭.我们对此引起的不便表示抱歉. 您正在处理的信息有可能丢失.Microsoft Office Word 可以尝试 ...

  5. 打开word文档时提示“Microsoft Office Word已停止工作”

    我的电脑(Win10)有Office 2003和2013两个版本,可能由于之前超长待机等原因导致word 2003的文件(.doc)不能正常打开,没次都会提示“Microsoft Office Wor ...

  6. 如何才能实现在点击链接时直接在网页中打开word文档,但不提示保存

    一般要直接打开需要客户端 1.客户端有word支持 2.客户端浏览器的版本与设置 可寻找一下相关的控件或中间件,我的意见是看能否变通一下,把word转成HTML或PDF再展示给用户.(若用户不需要编辑 ...

  7. ios在项目中打开word文档、ppt等总结

    最近在项目开发中遇到下载附件文档预览需求,在这里总结一下我的实现方法,本文最后会附带我写的demo下载地址 这里我总结了三种实现方法(1)用webView预览(2)通过UIDocumentIntera ...

  8. SharePoint 2013 用IE11在线打开Word文档报错

    问题: 测试结果: ie11会报错,ie10和以下版本不会报错,chrom不会报错. jindahao

  9. C#操作Word (2)-- 打开&关闭Word文档

    本文正式开始在VS2010中使用C#语言操作Word2007. 不是十分了解Word对象模型的朋友,请参考上一篇文章,或者下载:C#操作Word2007.pdf. ------------------ ...

随机推荐

  1. [杂] 将高版本iTunes备份恢复到低版本iOS设备中

    除非开发测试用设备,自用设备不要随便升iOS beta,不要随便升iOS beta,不要随便升iOS beta. 对于升级了高版本iOS的用户,默认情况下重刷低版本iOS时,iTunes不允许向低版本 ...

  2. XE8 & IOS开发之免费证书真机调试:开发证书、AppID、开发授权profile的申请,附Debug真机调试演示(XCode7 Beta版或以上版本适用,有图有真相)

    网上能找到的关于Delphi XE系列的移动开发的相关文章甚少,本文尽量以详细的图文内容.傻瓜式的表达来告诉你想要的答案. 原创作品,请尊重作者劳动成果,转载请注明出处!!! 注意,苹果发布Xcode ...

  3. [转载]《民航科技》2012年4月专家论坛:程延松《关于中国民航SWIM框架及技术实现探讨》

    专家介绍:程延松,现任成都民航空管发展有限公司总经理,理学博士,高级工程师,长期从事空管技术研究和产品研发工作,作为课题负责人,参与了国家863计划.国家科技支撑计划.国家空管委重点课题.民航局重点课 ...

  4. Pycharm注册码(2016.2)

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  5. [转]jquery getJSON 数据联动(采用序列化和反序列化获取数据) .

    <html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    ...

  6. jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法

    jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法   在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...

  7. Hibernate中evict方法和clear方法说明

    Hibernate中evict方法和clear方法说明 先创建一个对象,然后调用session.save方法,然后调用evict方法把该对象清除出缓存,最后提交事务.结果报错: Exception i ...

  8. DVD管理器集合版

    利用所学的集合写出的DVD管理系统,运用到了所学到集合基础. import java.text.ParseException; import java.text.SimpleDateFormat; i ...

  9. (转载)afxres找不到问题

    在试用VS2010时一个问题困扰了我,就是打开c++项目后,rc的dialog进不去,没法拖控件,把我给抓狂的...而且网上大部分说的都是Directions的问题..我的问题明显不是这个问题. 于是 ...

  10. 二模12day2解题报告

    T1.笨笨玩糖果(sugar) 有n颗糖,两个人轮流取质数颗糖,先取不了的(0或1)为输,求先手能否必胜,能,输出最少几步肯定能赢:不能,输出-1. 一开始天真的写了一个dp,f[i]表示i颗糖最少取 ...