C#生成word记录实例解析
本文以实例形式讲述了C#生成Word记录的方法,具体实现代码如下:
privatevoidbutton1_Click(objectsender,System.EventArgse) { objectoMissing=System.Reflection.Missing.Value; objectoEndOfDoc="\\endofdoc"; /*\endofdoc是预定义的bookmark*/ //创建一个document. Word._ApplicationoWord; Word._DocumentoDoc; oWord=newWord.Application(); oWord.Visible=true; oDoc=oWord.Documents.Add(refoMissing,refoMissing, refoMissing,refoMissing); //在document的开始部分添加一个paragraph. Word.ParagraphoPara1; oPara1=oDoc.Content.Paragraphs.Add(refoMissing); oPara1.Range.Text="Heading1"; oPara1.Range.Font.Bold=1; oPara1.Format.SpaceAfter=24;//24ptspacingafterparagraph. oPara1.Range.InsertParagraphAfter(); //在当前document的最后添加一个paragraph Word.ParagraphoPara2; objectoRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oPara2=oDoc.Content.Paragraphs.Add(refoRng); oPara2.Range.Text="Heading2"; oPara2.Format.SpaceAfter=6; oPara2.Range.InsertParagraphAfter(); //接着添加一个paragraph Word.ParagraphoPara3; oRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oPara3=oDoc.Content.Paragraphs.Add(refoRng); oPara3.Range.Text="Thisisasentenceofnormaltext.Nowhereisatable:"; oPara3.Range.Font.Bold=0; oPara3.Format.SpaceAfter=24; oPara3.Range.InsertParagraphAfter(); //添加一个3行5列的表格,填充数据,并且设定第一行的样式 Word.TableoTable; Word.RangewrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oTable=oDoc.Tables.Add(wrdRng,3,5,refoMissing,refoMissing); oTable.Range.ParagraphFormat.SpaceAfter=6; intr,c; stringstrText; for(r=1;r<=3;r++) for(c=1;c<=5;c++) { strText="r"+r+"c"+c; oTable.Cell(r,c).Range.Text=strText; } oTable.Rows[1].Range.Font.Bold=1; oTable.Rows[1].Range.Font.Italic=1; //接着添加一些文字 Word.ParagraphoPara4; oRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oPara4=oDoc.Content.Paragraphs.Add(refoRng); oPara4.Range.InsertParagraphBefore(); oPara4.Range.Text="Andhere'sanothertable:"; oPara4.Format.SpaceAfter=24; oPara4.Range.InsertParagraphAfter(); //添加一个5行2列的表,填充数据并且改变列宽 wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oTable=oDoc.Tables.Add(wrdRng,5,2,refoMissing,refoMissing); oTable.Range.ParagraphFormat.SpaceAfter=6; for(r=1;r<=5;r++) for(c=1;c<=2;c++) { strText="r"+r+"c"+c; oTable.Cell(r,c).Range.Text=strText; } oTable.Columns[1].Width=oWord.InchesToPoints(2);//Changewidthofcolumns1&2 oTable.Columns[2].Width=oWord.InchesToPoints(3); //Keepinsertingtext.Whenyougetto7inchesfromtopofthe //document,insertahardpagebreak. objectoPos; doubledPos=oWord.InchesToPoints(7); oDoc.Bookmarks.get_Item(refoEndOfDoc).Range.InsertParagraphAfter(); do { wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; wrdRng.ParagraphFormat.SpaceAfter=6; wrdRng.InsertAfter("Alineoftext"); wrdRng.InsertParagraphAfter(); oPos=wrdRng.get_Information (Word.WdInformation.wdVerticalPositionRelativeToPage); } while(dPos>=Convert.ToDouble(oPos)); objectoCollapseEnd=Word.WdCollapseDirection.wdCollapseEnd; objectoPageBreak=Word.WdBreakType.wdPageBreak; wrdRng.Collapse(refoCollapseEnd); wrdRng.InsertBreak(refoPageBreak); wrdRng.Collapse(refoCollapseEnd); wrdRng.InsertAfter("We'renowonpage2.Here'smychart:"); wrdRng.InsertParagraphAfter(); //添加一个chart Word.InlineShapeoShape; objectoClassType="MSGraph.Chart.8"; wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; oShape=wrdRng.InlineShapes.AddOLEObject(refoClassType,refoMissing, refoMissing,refoMissing,refoMissing, refoMissing,refoMissing,refoMissing); //DemonstrateuseoflateboundoChartandoChartAppobjectsto //manipulatethechartobjectwithMSGraph. objectoChart; objectoChartApp; oChart=oShape.OLEFormat.Object; oChartApp=oChart.GetType().InvokeMember("Application", BindingFlags.GetProperty,null,oChart,null); //ChangethecharttypetoLine. object[]Parameters=newObject[1]; Parameters[0]=4;//xlLine=4 oChart.GetType().InvokeMember("ChartType",BindingFlags.SetProperty, null,oChart,Parameters); //UpdatethechartimageandquitMSGraph. oChartApp.GetType().InvokeMember("Update", BindingFlags.InvokeMethod,null,oChartApp,null); oChartApp.GetType().InvokeMember("Quit", BindingFlags.InvokeMethod,null,oChartApp,null); //...Ifdesired,youcanproceedfromhereusingtheMicrosoftGraph //ObjectmodelontheoChartandoChartAppobjectstomakeadditional //changestothechart. //Setthewidthofthechart. oShape.Width=oWord.InchesToPoints(6.25f); oShape.Height=oWord.InchesToPoints(3.57f); //Addtextafterthechart. wrdRng=oDoc.Bookmarks.get_Item(refoEndOfDoc).Range; wrdRng.InsertParagraphAfter(); wrdRng.InsertAfter("THEEND."); //Closethisform. this.Close(); }
使用模板生成通用格式Word文件:
如果您要使用自动化功能创建的文档都是通用格式,则利用基于预设格式的模板的新文档来开始创建过程会更加容易。与从头创建文档相比,将某个模板与Word自动化客户端配合使用有两大优点:
1.您可以对整个文档中的对象的格式设置和布局施加更多控制。
2.可以使用较少的代码创建文档。
通过使用模板,可以精确地调整表格、段落和其他对象在文档中的布局,并可为这些对象添加格式设置。通过使用自动化功能,可以基于包含下面这样的代码的模板创建新文档:在模板中,可以定义书签,这样,自动化客户端就可以在文档的特定位置加入可变文本,如下所示:使用模板的另一个优点在于,您可以创建和存储希望在运行时应用的格式样式,如下所示:
objectoTemplate="c:\\MyTemplate.dot"; oDoc=oWord.Documents.Add(refoTemplate,refoMissing, refoMissing,refoMissing); objectoBookMark="MyBookmark"; oDoc.Bookmarks.Item(refoBookMark).Range.Text="SomeTextHere"; objectoStyleName="MyStyle"; oDoc.Bookmarks.Item(refoBookMark).Range.set_Style(refoStyleName); objectoStyleName="MyStyle"; oWord.Selection.set_Style(refoStyleName);
最主要的就是理解wordapplication的框架层次,其它的就像面向过程编程一样,一步步写代码,其中比较麻烦的是嵌套的表格。