您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 给排水/暖通与智能化 > C#打开Word文档详解
C#操作WordWord对象模型图Application:用来表现WORD应用程序,包含其它所有对象。他的成员经常应用于整个Word,可以用它的属性和方法控制Word环境。Document对象:Document对象是Word编程的核心。当打开一个已有的文档或创建一个新的文档时,就创建了一个新的Document对象,新创建的Document将会被添加到WordDocumentsCollection。Selection:Selection对象是描述当前选中的区域。若选择区域为空,则认为是当前光标处。Rang:是Document的连续部分,根据起始字符的结束字符定议位置。Bookmark:类似于Rang,但Bookmark可以有名字并在保存Document时Bookmark也被保存。以下代码则为打开一个WORD2003文件:publicvoidCreateWordDocument(stringFileName){if(FileName==””)return;this.thisApplication=newMicrosoft.Office.Interop.Word.ApplicationClass();thisApplication.Cation=””;thisApplication.Visible=true;thisApplication.Options.CheckSpellingAsYouType=false;thisApplication.Options.CheckGrammarAsYouType=false;Objectfilename=FileName;ObjectConfirmConversions=false;ObjectReadOnly=false;ObjectAddToRecentFiles=false;ObjectPasswordDocument=System.Type.Missing;ObjectPasswordTemplate=System.Type.Missing;ObjectRevert=System.Type.Missing;ObjectWritePasswordDocument=System.Type.Missing;ObjectWritePasswordTemplate=System.Type.Missing;ObjectFormat=System.Type.Missing;ObjectEncoding=System.Type.Missing;ObjectVisible=System.Type.Missing;ObjectOpenAndRepair=System.Type.Missing;ObjectDocumentDirection=System.Type.Missing;ObjectNoEncodingDialog=System.Type.Missing;ObjectXMLTransform=System.Type.Missing;//Microsoft.Office.Interop.Word.DocumentClasswordDoc=//wordApp.Documents.Open(reffilename,refConfirmConversions,//refReadOnly,refAddToRecentFiles,refPasswordDocument,refPasswordTemplate,//refRevert,refWritePasswordDocument,refWritePasswordTemplate,refFormat,//refEncoding,refVisible);//Microsoft.Office.Interop.Word.DocumentClasswordDoc=//wordApp.Documents.Open(reffilename,refConfirmConversions,refReadOnly,ref//AddToRecentFiles,refPasswordDocument,refPasswordTemplate,refRevert,ref//WritePasswordDocument,refWritePasswordTemplate,refFormat,refEncoding,ref//Visible,refOpenAndRepair,refDocumentDirection,refNoEncodingDialog);Microsoft.Office.Interop.Word.DocumentwordDoc=thisApplication.Documents.Open(reffilename,refConfirmConversions,refReadOnly,refAddToRecentFiles,refPasswordDocument,refPasswordTemplate,refRevert,refWritePasswordDocument,refWritePasswordTemplate,refFormat,refEncoding,refVisible,refOpenAndRepair,refDocumentDirection,refNoEncodingDialog,refXMLTransform);this.thisDocument=wordDoc;formFields=wordDoc.FormFields;}}关闭WORD程序:ObjectSaveChangs=false;ObjectOriginalFormat=System.Type.Missing;ObjectRouteDocument=System.Type.Missing;this.thisApplication.Quit(refSaveChanges,refOriginalFormat,refRouteDocument);一个Document可能会有多个Rang对象。Rang由起始和结束字符来定它的位置。以下代码为先清空Document里的内容,再在第一行写入内容://ClearoutanyexistinginformationObjectstart=Type.Missing;Objectend=Type.Missing;Objectunit=Type.Missing;Objectcount=Type.Missing;ThisDocument.Range(refstart,refend).Delete(refunit,refcount);//SetuptheheaderinformationStart=0;End=0;rng=ThisDocument.Range(refstart,refend);rng.InsertBefore(“Xiaopai”);rng.Font.Name=”Verdana”;rng.Font.Size=16;rng.InsertParagraphAfter();//输入回车以下为在刚写入的内容后添加一个表格:ObjectmissingValue=Type.Missing;Objectlocation=8;//注:若location超过已有字符的长度将会出错Word.Rangerng=ThisDocument.Range(reflocation,reflocation);ThisDocument.Tables.Add(rng,3,4,refmissingValue,refmissingValue);以下为在刚创建的表格里添加一行:Word.Tabletbl=ThisDocument.Tables[1];//第一个表格为1,而不是0ObjectbeforeRow=Type.Missing;tbl.Rows.Add(refbeforeRow);//在表格的最后添加一行填充表格内容:tbl.Cell(1,1).Range.Text=”shuai”;//在表格的第一行第一列填入内容设置单元格风格:Word.RangerngCell;rngCell=tbl.Cell(1,2).Range;rngCell.ParagraphFormat.Alignment=Word.WdParagraphAlignment.wdAlignParagraphRight;rngCell.FontSize=8;rngCell.Font.Name=”Verdana”;C#编程实现在Word文档中搜索文本Word的对象模型有比较详细的帮助文档,放在Office安装程序目录,office2003是在ProgramFiles\MicrosoftOffice\OFFICE11\2052下,文档本身是VBA提供的,在这个目录下还可以看到所有的office应用程序的VBA帮助。打开VBAWD10.CHM,看到word的对象模型,根据以往的使用经验,很容易在Document对象下找到Content属性,该属性会返回一个文档文字部分的Range对象,从这个对象中不难取所有文档内容,再用string的IndexOf()方法很容易达到目标。objectfilename=”…”;//要打开的文档路径stringstrKey=”…”;//要搜索的文本objectMissingValue=Type.Missing;Word.Applicationwp=newWord.ApplicationClass();Word.Documentwd=wp.Documents.Open(reffilename,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue);if(wd.Context.Text.IndexOf(strKey)=0){MessageBox.Show(“文档中包含指定的关键字!”,”搜索结果”,MessageBoxButtons.OK);}else{MessageBox.Show(“文档中没有指定的关键字!”,”搜索结果”,MessageBoxButton.OK);}不过,这种做法很勉强的,对小文档来说,不存在问题,对超长超大的文档来说,这样实现方法已经暗埋bug了,而且是程序级的bug,因为正常的测试会很难发现问题,在使用中导致程序出现什么样的结果也很难量化描述。其实,在Word中已经提供了可以用作搜索的对象Find,在对象模型上也比较容易找到,对应的说明是这样的:该对象代表查找操作的执行条件。Find对象的属性和方法与“替换”对话框中的选项一致。从模型上看,Find对象是Selection的成员,从示例代码来看似乎也是Range的成员,查找Range的属性,果然如此。修改代码如下:wd.Content.Find.Text=strKey;if(wd.Content.Find.Execute(refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue,refMissingValue)){MessageBox.Show(“文档中包含指定的关键字!”,”搜索结果”,MessageBoxButtons.OK)
本文标题:C#打开Word文档详解
链接地址:https://www.777doc.com/doc-4014586 .html