用 c# 来操作WORD的经验总结

摘要:
word.Documentdoc=null;//要打开的第一个WORD文档是WORD。Documentdoc2=null//要打开的另一个WORD文档,wordapp=newword。ApplicationClass();wordapp.Visible=true;//打开的WORD程序是否可见=空){WORD.Documentdocc=doc2ashi剑.Document;docc.Close;}wordapp.Quit;}}7.替换文档中的内容//////替换文档中内容////原始内容//替换后替换内容publicvoid Replace{doc2。所容纳之物发现文本=oldString;objectFindText,ReplaceWith,ReplaceAll;FindText=oldString;ReplaceWith=newString;ReplaceAll=单词。Wd更换。wdReplaceAll;doc2.内容。发现执行;}如果要用空格替换回车符,可以使用替换;这与WORD中使用的替换功能相同。

最近在做一个程序,需要在程序中对Word内容做些处理。从网上查了很多资料,发现,许多都是重复的。更有许多知识,根本没有讲到。为了以后使用方便。将所有的这些知识,加以总结,以备后来人使用。

1、引用

    需要引用 COM库:Microsoft word 11.0 Object Library. 不同的版本,会有不同的版本号。

   如 2010版Office 就是 Microsoft word 14.0 Object Library.

2、引用相应的名字空间:

    using Microsoft.Office.Core;

    using word = Microsoft.Office.Interop.Word;

3、打开一个已存在的word文档

public void OpenDocFile(string docName)
        {
            
        object oMissing = System.Reflection.Missing.Value;  //一个编程时需要经常使用的一个参数
        word.ApplicationClass wordapp = null;   //这是WORD程序,在这个程序下,可以同时打开多个文档,尽量不要同时打开多个Word程序,否则会出错的。
        word.Document doc = null;  //第一个需要打开的WORD文档
        word.Document doc2 = null;  //另一个需要打开的WORD文档

 
        wordapp = new word.ApplicationClass();
        wordapp.Visible = true; //所打开的WORD程序,是否是可见的。
 
            object docObject = docName;  //由于COM操作中,都是使用的 object ,所以,需要做一些转变                       
         if (File.Exists(docName))   // 如果要打开的文件名存在,那就使用doc来打开 
            {
                doc = wordapp.Documents.Add(ref docObject, ref oMissing, ref oMissing, ref oMissing);
                doc.Activate();   //将当前文件设定为活动文档
                ParagraphsCount = doc.Content.Paragraphs.Count;   //此文档中,段落的数量,也就是这个文档中,有几个段落。
            }
            else   //如果文件名不存在,那就使用doc2来打开
            {
                doc2 = wordapp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
                DocFileName = docName;
                doc2.Activate();   //将当前文件设定为活动文档  

            }

                  
        }

 4、获取某一段的具体文本内容

public string Paragraph(int index)
        {
            word.Paragraph   para;  
            para = doc.Content.Paragraphs[index];   ///这是一个设定对应的某一段              
            return para.Range.Text;
        }

 5、DOC内容借助于剪贴板的复制与粘贴

/// <summary>
        /// 将doc某一段的内容复制到剪贴板上
        /// </summary>
        /// <param name="index">段的序号</param>
        public void CopyParagraph( int index)
        {
            word.Paragraph para;
            para = doc.Content.Paragraphs[index];
            para.Range.Copy();
        
        }
        /// <summary>
        /// 将剪贴板的内容粘贴到doc2文档中
        /// </summary>
        public void PasteParagraph()
        {
            if (doc2 != null)
            {
                word.Paragraph para = doc2.Content.Paragraphs.Add(ref oMissing);
                try
                {
                    para.Range.Paste();
                    para.Range.InsertParagraphBefore();//添加一次回车
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }

6、关闭WORD程序和文档

/// <summary>
        /// 关闭 word程序
        /// </summary>
        public void CloseWord()
        {
            if (wordapp != null)
            {
                if (doc != null)
                {
                    word._Document docc = doc as word._Document;
                    docc.Close(ref oMissing, ref oMissing, ref oMissing);
                }

                if (doc2 != null)
                {
                    word._Document docc = doc2 as word._Document;
                    docc.Close(ref oMissing, ref oMissing, ref oMissing);
                }

                wordapp.Quit(ref oMissing, ref oMissing, ref oMissing);
            }
        }

7、替换文档中的内容

/// <summary>
        /// 替换文档中的内容
        /// </summary>
        /// <param name="oldString">原有内容</param>
        /// <param name="newString">替换后的内容</param>
        public void Replace(string oldString, string newString)
        {
            doc2.Content.Find.Text = oldString;
            object FindText, ReplaceWith, ReplaceAll;

            FindText = oldString;
            ReplaceWith = newString;
            ReplaceAll = word.WdReplace.wdReplaceAll;
            doc2.Content.Find.Execute(ref FindText, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref ReplaceWith, 
                                      ref ReplaceAll, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing, 
                                      ref oMissing);

        }

以上,如果要替换其中的回车符为空格,可以这样使用

Replace(“^p”,"");

就可以了,这一点,与在WORD中使用的替换功能是一样的。

8、保存文档内容

/// <summary>
        /// 保存word文档(只保存doc2)
        /// </summary>
        public void SaveDocFile()
        {
            if (doc2 != null)
            {
                if (!string.IsNullOrEmpty(DocFileName))
                {
                    object docname = DocFileName;//要保存的文件名称,包括路径
                    Replace("^p^p", "^p");
                    doc2.SaveAs2(ref docname, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing,
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing, 
                                 ref oMissing,
                                 ref oMissing,
                                 ref oMissing);
                }
            }
        
        }

9、在复制过程中,如果文档中有表格,那么,上面所使用的复制方法,一般会报错。“"此方法或属性无效,因为 对象涉及表格行尾"。出现的原因就是因为 Paragraphs 只能是文字内容不能包括表格,在WORD中,表格是另一类重要的文档类型。其实在表格中,每一个单元格都是一个独立的段落。所以,如果文档中有表格,那么文档的 doc.Content.Paragraphs.Count 数量会增加很多。在复制过程中,可以采用下面的方法来复制。

/// <summary>
        /// 复制文档的内容,从开始到结束(包括结束与开始的段落)的段落内容。
        /// </summary>
        /// <param name="first">开始的段落号</param>
        /// <param name="next">结束的段落号</param>
        public void CopyParagraph2(int first,int next)
        {
            word.Range range = doc.Range();

            word.Paragraph para1;
            para1 = doc.Content.Paragraphs[first];
            range.Start = para1.Range.Start;

            word.Paragraph para2;
            para2 = doc.Content.Paragraphs[next];
            range.End = para2.Range.End;

            range.Copy();
        
        }

在这个复制过程中,重新建立了一个区域 word.Range range = doc.Range(); 这个区域包括文档的所有内容。
然后根据段落的要求分别设定区域的Start  和 End ,如果在 Start  和 End 之间有一个表格的话,那么表格也会被正确复制过去.

 10、创建一个新的word文档

        void CreateWord()
        {
            object path;//文件路径
            string strContent;//文件内容
            MSWord.Application wordApp;//Word应用程序变量
            MSWord.Document wordDoc;//Word文档变量
            path = "d:\myWord.doc";//保存为Word2003文档
           // path = "d:\myWord.doc";//保存为Word2007文档
            wordApp = new MSWord.ApplicationClass();//初始化
            if (File.Exists((string)path))
            {
                File.Delete((string)path);
            }
            //由于使用的是COM 库,因此有许多变量需要用Missing.Value 代替
            Object Nothing = System.Reflection.Missing.Value;
            //新建一个word对象
            wordDoc = wordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
            //WdSaveDocument为Word2003文档的保存格式(文档后缀.doc)wdFormatDocumentDefault为Word2007的保存格式(文档后缀.docx)
            object format = MSWord.WdSaveFormat.wdFormatDocument;
           //将wordDoc 文档对象的内容保存为DOC 文档,并保存到path指定的路径
            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, ref Nothing, ref Nothing, ref Nothing);
            //关闭wordDoc文档
            wordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
            //关闭wordApp组件对象
            wordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
        }

免责声明:文章转载自《用 c# 来操作WORD的经验总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server是如何让定时作业用javaweb写一个注册界面,并将数据保存到后台数据库(全部完成)(课堂测试)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

iOS开发中使用[[UIApplication sharedApplication] openURL:]加载其它应用

iOS 应用程序之间(1) 在iOS开发中,经常需要调用其它App,如拨打电话、发送邮件等。UIApplication:openURL:方法是实现这一目的的最简单方法,该方法一般通过提供的url参数的模式来调用不同的App。   通过openURL方法可以调用如下应用:   调用谷歌地图(Google Maps) 调用邮件客户端(Apple Mail)...

利用xcode生成的app生成可以在iphone和itouch上运行的ipa安装包

在编译好的真机版目录下的.app文件,至于生成真机可以运行的app的方法,有两种方式,一种是交99美元获得一个证书,另外一种是破解的方式,在此不再详述,本文假设你已经生成了真机上可以运行的app包了(app包实际上是一个文件夹) 假设此安装包的名称是 hello.app,点击右键,选择 显示包内容,这样就可以打开这个hello.app文件夹了,在此文件夹中...

被hao123劫持主页最佳解决办法

作者:田无法链接:https://www.zhihu.com/question/39881858/answer/159582643来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 被hao123劫持主页最佳解决办法 方法一 下载360卫士,然后使用其主页劫持工具,可以恢复,但是还没结束,如果这是你高高兴兴地删除360,等第二次...

Linux环境下常用软件(个人笔记编辑更改中)

近期使用CentOS,就在这里记录一下。首先,个人版本是CentOS6.5,属于centos系列,Fedora系列的理论上也可以用。 工欲善其事,必先利其器,这里介绍我的软件包配置: 1、vim(增强版vi)和Emacs(PS:有人说他们是神的编辑器和编辑器的神) 对vim: # yum -y install vim*或者 #apt-get install...

SQL server 2008 数据库企业版安装教程图解

SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本。在现今数据的世界里,公司要获得成功和不断发展,他们需要定位主要的数据趋势的愿景。微软的这个数据平台愿景帮助公司满足这些数据爆炸和下一代数据驱动应用程序的需求。微软将继续投入和发展以下的关键领域来支持他们的数据平...

UOS怎么访问windows共享的文件夹

先在windows中建一个共享文件夹,此处就先忽略步骤,共享文件夹相关信息如下图: 在UOS桌面上面建一个文件夹,比如,我在这里建了一个 winshare 再在桌面右键点击鼠标,选择在终端中打开 然后再在终端中输入以下命令,期间有提示需要密码,则直接输入密码,如果有提示需要进入开发者模式,则对应的开启一下开发者模式,如果不清楚,看此链接(https...