如何在C#Winform上的WebBrowser控件中打开Word 2013文档?

时间:2015-02-25 21:57:54

标签: c# office-automation

在我的C#Winforms应用程序中,我有一个WebBrowser控件,我想在其中显示一个Word文档。我通过电话显示文件 webBrowser1.Navigate(myDocName)

这适用于通过Word 2003的文档。

对于Word 2007和2010,这导致Word在新创建的Word实例中打开文档,而不是在包含WebBrowser的Winform上打开文档。我能够通过在客户端计算机上添加以下注册表项来解决此问题(请注意,这也可以在Excel中完成 - 要写入的值为(int)0x80000A00,并且类已\Excel.Sheet到位\Word.Document):

int wordFlagValue = (int)0x80000024;

Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.8", "BrowserFlags", wordFlagValue);

Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.12", "BrowserFlags", wordFlagValue);

注意:Common.SaveToRegistryLocalMachine()只是在HKEY_LOCAL_MACHINE下编写注册表项的包装函数

问题是某些客户端现在安装了Word 2013,并且再次出现新的Word实例问题。我尝试添加以下注册表项(以反映Word的新版本),但无效:

Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.14", "BrowserFlags", wordFlagValue);
Common.SaveToRegistryLocalMachine(@"SOFTWARE\Classes\Word.Document.15", "BrowserFlags", wordFlagValue);   

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:3)

(免责声明:我在微软和Internet Explorer工作期间,我对此领域没有特别的了解)

我认为问题是因为Office 2013不再支持由Internet Explorer托管[需要引证!]。这是出于各种原因,但我认为,因为我们(作为公司)为OLE和COM所持有的愿景从未真正解决过,而且它通常会带来糟糕的用户体验(请记住尝试编辑嵌入式Excel电子表格调整大小后的Word文档?)。

我记得Office 2003确实支持由其他进程(例如Internet Explorer甚至Visual Studio 6.0)托管,但是自从Office 2007以来我认为他们默认禁用了该功能,你必须跳过篮球才能让它工作,然后他们在2013年完全禁用了它。我认为,不要把它作为权威信息!

如果我错了(我很可能会这样),问题可能是因为你有一个64位进程(例如x64 OS上的.NET中为AnyCPU)但是32位安装的Office版本,你不能在同一个进程中混合使用32位和64位二进制文​​件,因此它可能会起作用,但在此失败是因为它是错误的ISA。