该文章主要是讲述如何使用VS2012创建word文档,因为在项目中我们可能需要点击一个按钮把数据库中的项目表单或图片显示到word文档中,因此该文章主要分析如何使用VS2012创建word文档并填写相应的内容.主要通过C#引用Miscrosoft Word 14.0 Object Library实现的.
一.创建工程
首先是使用VS2012创建一个windows窗体程序,并添加如下图所示的界面.
二.添加引用
然后需要引用COM中的Miscrosoft Word 14.0 Object Library到工程中去.在"解决方案资源管理器"窗口中右击"引用"对象,在弹出的快捷菜单中选择"添加引用"命令,弹出"添加引用"对话框中选择COM选项卡,选择"Miscrosoft Word 14.0 Object Library".如下图所示:
添加后,查看工程解决方案中引用,会看到引用到工程中的word对象如下图所示,这里会引用Microsoft.office.Interop.Word对象.
三.源代码
双击Form1界面空白处,进行添加源代码操作,首先添加的下面的引用代码,其中MSWord是引用word对象,System.Reflection命名空间是引用Missing.Value缺省值.
//引用word对象类库和命名空间 using MSWord = Microsoft.Office.Interop.Word; using System.IO; using System.Reflection;
添加源程序代码如下所示:
namespace PDFTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } object path; //声明文件路径变量 string wordstr; //声明word文档内容 MSWord.Application wordApp; //声明word应用程序变量 MSWord.Document worddoc; //声明word文档变量 //点击"创建"按钮实现创建word文件 private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "" || textBox2.Text == "") { MessageBox.Show("请输入路径和文档名信息"); } else { //初始化变量 object Nothing = Missing.Value; //COM调用时用于占位 object format = MSWord.WdSaveFormat.wdFormatDocument; //Word文档的保存格式 wordApp = new MSWord.ApplicationClass(); //声明一个wordAPP对象 worddoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing); //向文档中写入内容 wordstr = textBox3.Text; worddoc.Paragraphs.Last.Range.Text = wordstr; //保存文档 path = textBox2.Text + "\\" + textBox1.Text; //设置文件保存路劲 worddoc.SaveAs(ref path, ref format, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing); //关闭文档 worddoc.Close(ref Nothing, ref Nothing, ref Nothing); //关闭worddoc文档对象 wordApp.Quit(ref Nothing, ref Nothing, ref Nothing); //关闭wordApp组对象 MessageBox.Show("文档创建成功!"); } } } }
四.运行结果
点击运行,输入如上图界面中的内容,会在G:\路径下创建一个test.doc的word 2003的文件,并填写内容.如下图所示:
五.错误与分析
在运行前可能会出现错误提示:无法嵌入互操作类型"Microsoft.Office.Interop.Word.ApplicationClass".解决方法是:在Visual Studio 中点击菜单项"视图->解决方案资源管理器"在其中点开"引用"文件夹,在"Microsoft.Office.Interop.Word" 上点击鼠标右键选择"属性".将属性中的"嵌入互操作类型"的值改为"false"即可.如下图所示:
同时代码中的object Nothing = Missing.Value表示缺少的值,在使用C#->COM时某个参数不会被使用时用于占位,类似于C++中NULL,但C#中null与它不同,所以当你调用COM使传空或占位就需要该代码实现相同的功能.注意Missing.Value的命名空间在System.Reflection中.通常Microsoft
Word 11.0 Object Library对应Word 2003,Microsoft Word 12.0 Object Library对应Word 2007,如果想创建docx文档,设置word格式时为object format =MSWord.WdSaveFormat.wdFormatDocumentDefault.
六.总结
最后推荐大家看看这篇博客,它详细介绍了C#操作office文档.http://blog.csdn.net/wudi626/article/details/2337857同时我上面的知识也参看了一些博客,还有刘丽霞等编写的《C#范例开发大全》,在此感谢这些人.这篇文章主要是在做数据库系统中要引用到打印报表,显示为pdf|word格式,所以才写了该文章,后面还想写一篇关于word中插入表格和图片的word操作,至于页面布局等我不想涉及,但思想都是一致的.希望文章对大家有帮助,同时有不足或错误的地方,见谅!
(By:Eastmount 2013-9-6 下午4点http://blog.csdn.net/eastmount/)