c#,winForm嵌入word并能操作文档

请教高手,我继续解决,不知道的请别留言,谢谢合作!不能解决问题的坚决不给分。
我需要在winform中显示word文档,并能对文档进行操作,例如(修改,保存),也就是能用代码直接对文档进行操作。请描述怎样做,是否需要第三方什么控件,给出关键代码
注意:请不要说用这样的代码:
Word.ApplicationClass word = new Word.ApplicationClass();

Word.Application word = new Word.Application();
这样确实能对word文档进行操作,但是它弹出独立的word界面。
当然如果你有办法用这样的方法也可以让文档嵌在winForm中也可以。

第1个回答  推荐于2016-07-16
在 Visual C# .NET 中新建一个 Windows 应用程序项目。默认情况下会创建 Form1。
在工具菜单上,单击自定义工具箱以打开自定义工具箱对话框。在 COM 组件选项卡上,添加一个对 Microsoft WebBrowser 的引用。单击确定,将 WebBrowser 控件添加到 Windows 窗体工具箱。WebBrowser 控件会显示出来,并且在工具箱中带有 Explorer(资源管理器)字样。
使用该工具箱向 Form1 添加一个 WebBrowser 控件、一个 OpenFileDialog 控件和一个 CommandButton 按钮。这就会向 Form1 类添加 AxWebBrowser1、OpenFileDialog1 和 Button1 成员变量。
在 Form1 上,双击 button1。这就会向 Form1 添加 Button1_Click 事件。
在 Form1 的代码窗口中,向列表添加以下命名空间:using System.Reflection;

如下所示在 Form1 类中定义一个私有成员:private Object oDocument;
在 Form1 类的 InitializeComponent 方法的末尾,添加以下代码以处理 Form1_Load、Form1_Closed 和 axWebBrowser1_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);

将下面的代码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() );
}

按 F5 键运行该项目。单击浏览后,会出现打开对话框,您可以使用该对话框浏览到 Word 文档、Excel 工作表或 PowerPoint 演示文稿。选择任一文件,然后单击打开。文档在 WebBrowser 控件内打开,并出现一个显示有 Office 文档服务器名称的消息框。本回答被提问者采纳
第2个回答  2008-01-04
如下所示在 Form1 类中定义一个私有成员:private Object oDocument;
在 Form1 类的 InitializeComponent 方法的末尾,添加以下代码以处理 Form1_Load、Form1_Closed 和 axWebBrowser1_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);

将下面的代码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() );
}

按 F5 键运行该项目。单击浏览后,会出现打开对话框,您可以使用该对话框浏览到 Word 文档、Excel 工作表或 PowerPoint 演示文稿。选择任一文件,然后单击打开。文档在 WebBrowser 控件内打开,并出现一个显示有 Office 文档服务器名称的消息框。

c#,winForm嵌入word并能操作文档
按 F5 键运行该项目。单击浏览后,会出现打开对话框,您可以使用该对话框浏览到 Word 文档、Excel 工作表或 PowerPoint 演示文稿。选择任一文件,然后单击打开。文档在 WebBrowser 控件内打开,并出现一个显示有 Office 文档服务器名称的消息框。

C#WinForm中,怎么把一个word文档嵌入到一个窗体中,然后对word文档进行...
使用DSOFramer控件。去年我做过一个项目,就是用这个控件来操作Excel文件的。用它也可以操作word文档。如果不喜欢这个控件,可以使用浏览器控件如WebBroswer来嵌入网页版的word控件。最后一个方式当然就是操作office的COM接口,不过这个略显复杂。

C#中winform能不能嵌套word程序
可以。前提是你的电脑里安装了Office,我用的是2003,那么在我电脑里就会有Office的 COM组件 。比如说我的 Office2003 就附带了Microsoft Word 11.0 Object Library,引用进来就可以用了啊。还有,你在工具箱里点右键,然后选择“选择项”,在弹出的的对话框中选择COM组件,选择Office控件,添加进来。就...

C#程序嵌入Word窗口
你可以通过调用句柄嵌套,你可以后台运行一个word程序,然后通过获取句柄来执行方法,举个例就像打开一个word文件,获得word文件子窗体句柄嵌套到你得窗体中去,至于句柄的调用要用到win32函数,这些你可以参考下句柄的使用.或者还有种方法是了解微软word程序接口,调用其程序 以上纯属个人想法,希望对你有帮助 ...

C# winform中怎么嵌入WPS
WPS超强综合实用技巧01-WPS三剑客彼此之间的文件嵌入操作

C# WinForm窗体中,嵌入类似于Excel表格
DsoFramer_KB311765_x86.exe 用这个控件,可以上网去下载,百度或到微软官网下载。如果下不到也可以找我发。这个控件可以在WINFORM里面直接把EXCEL引用上来显示在控件里面,就像在操作EXCEL一模一样。可以在Excel里面先设置好,把标题隐藏,状态栏,编辑栏,滚动条等这些隐藏,这样看起来也看不出是在Excel...

C#--->>Winform如何操作Word中的单选、复选按钮状态
和导excel差不多的 首先标签定位,然后就输出到word

c#读取word文档为何要引用com
一个C#编写的winform应用程序才几十k大小,你认为这几十k大小的小东西什么都能做吗?它肯定要借用一些"工具"才能实现相应的功能.你引用com里的都是dll.这些dll可不都是C#语言开发的.但也没人说C#语言只能用C#语言开发的dll,c ,c++开发的dll一样可以给C#用.至于你引用的word的dll应该的c写的.C#...

c# winform 数据库保存数据时候,能不能顺便也保存一个文档,这个文档加...
可以的,这个是数据库的设计问题,要你自己在数据库中新增1张表或者字段来保存 以新增表(oracle)来说,主键ID,文档名称,文档数据(LONG RAW)类型,外键,时间五个字段,查询的时候关联下这个表就行了

C#winform中的tabcontrol中嵌入form问题
用事件的订阅吧,可以实现多个不同界面之间的传值,这种方法是最灵活的。就是delegate和event。给你一个示例http:\/\/www.jb51.net\/article\/41271.htm。另外,给你一个建议,在窗体关闭时将将订阅的事件取消,用“-=”操作,这样不易留隐患

相似回答