在Visual C# 2005或.NET中使用WebBrowser控件打开Office文档的完整指南

2024-12-27 0 702

在计算机编程领域,尤其是C#编程中,存在一个既有趣又略显复杂的现象。那就是文档,作为可嵌入的OLE对象,其表现更接近于控件,而非常规的OLE对象。虽然这属于较为技术性的内容,但对于从事相关开发工作的专业人士来说,深入研究这一点是非常有价值的。

文档的属性特殊

这份文档具有独特性。它被视为一个整体。比如,在处理某些大型项目时,我们常看到它仅作为单一资源被查阅或搜集,同时它也可能包含其他文件,比如绑定器文件等。此外,C# 2005和C#.NET并不直接支持此类文档的托管,开发者需借助控件来进行操作。

这给开发工作带来了不小的挑战。比如,在一个企业级办公软件的开发项目中,团队打算用C#来处理涉及众多文档资源的管理功能。这样的限制使得最初的技术选择和规划变得非常困难,他们不得不更多地思考如何适应这一状况。

aximp %WINDIR%system32shdocvw.dll

创建打开文档的C#应用步骤

要在C#中开发一个能打开特定文档的应用,需要遵循一系列操作。如果在C# 2005版本中找不到.dll文件,就需要在命令行界面执行一系列特定的指令。此外,还需为Web浏览器控件生成公共语言运行时代理文件(.dll)以及窗体代理文件(.dll)。

在实际的项目操作中,尤其是在一个小规模的文档处理软件创业项目里,若开发团队打算运用该技术搭建基础架构,就得严格遵守一系列流程。若稍有疏忽,比如未能准确添加.dll文件,或是操作指令出现错误,那么程序中关于文档打开的功能将难以正常运作。

C# 2005 中的相关操作

using System.Reflection;

C# 2005版本中涉及众多操作细节。控件会随文本资源管理器一同显示在工具箱中。开发者可利用工具箱将控件添加至Form1,此举将为Form1类增加众多成员变量。此外,还需在Form1的代码窗口里,将特定命名空间加入列表,并创建专属成员。

private Object oDocument;

公司内部进行办公软件优化工作时,开发者遵循既定步骤更新旧软件,可能会遭遇诸如不同框架间的不兼容等问题。若对这些细节处理不慎,更新后的软件在文档编辑功能上可能会出现新的错误。

处理事件代码

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);

在Form1类方法的最后部分,需要加入代码来处理相关事件。在建立窗体项目过程中,C#系统会自动为项目添加一个窗体界面。Form1.cs文件是设计器生成代码的存放地,所有通过拖拽控件箱中的组件所生成的代码,都会被写入这个文件中。

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() ); 
}

2007程序文档情况

2007版在此方面有所区别。通常情况下,它不会在网页浏览器中直接打开文档。因此,在开发应用软件打开2007文档时,更推荐使用定制的文档容器而非控件。若现有应用需与该控件保持兼容,则需要调整注册表进行配置。

在大型企业进行办公软件系统升级的项目里,若是从旧版升级到2007文档处理模块,就必须注意兼容性问题。一旦决策出现偏差,企业办公效率可能会因文档无法正常打开而受影响。

查看文档相关问题

查看2007版程序文档时,可能会遇到一些特殊情况,比如会出现新窗口。若依照知识库中的文章所述方法去调整注册表,这可能会对程序中使用的控件产生影响。

从事软件维护的技术人员必须对此保持高度警觉。若未经全面考虑,轻率修改注册表,可能会引发一系列连锁反应,进而干扰软件系统对文档的处理。

在掌握了大量关于C#文档如何作为OLE对象嵌入及使用的知识后,你是否思考过若在个人项目中遇到类似问题该如何应对?若觉得这篇文章对你有所启发,不妨点个赞并转发一下。

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

七爪网 行业资讯 在Visual C# 2005或.NET中使用WebBrowser控件打开Office文档的完整指南 https://www.7claw.com/2805413.html

七爪网源码交易平台

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务