以后的数字没试过)newTable.Borders.OutsideLineWidth=WdLineWidth.wdLin

时间:2021-09-04 08:10:48

本文实例讲述了C#实现通过模板自动创建Word文档的要领,长短常实用的技巧。分享给大家供大家参考。具体实现要领如下:

引言:前段时间有项目要用c#生成Word格局的计算呈报,通过网络查找到很多内容,但是都很凌乱,于是本身决定将具体的法式总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决!

现通过具体的示例演示具体的法式:


第一步,制作模板



1.新建一个文档,设置文档内容。

2.在相应位置插入书签;将鼠标定位到要插入书签的位置,点击“插入”>“书签”,弹出对话框,输入书签名,点击“添加”按钮。

3.生存模板,定名为“模板1.dot”或者“模板1.doc”


第二步,设置项目中的引用

1.右击“解决方案资源打点器”中的项目目录下的“引用”,选择“添加引用”,打开“添加引用”对话框

2.在“添加引用”对话框中,选择“COM”>“Microsoft Word 11.0 Object Library”,点击“确定”按钮

3.不异操纵打开“添加引用”对话框中,选择“浏览”项,查找到”Microsoft.Office.Interop.Word.dll”文件,选中它,点击“确定”按钮

注意:

此处要查找的“Microsoft.Office.Interop.Word.dll”版本必需为“11.*.*.*”,“*”代表数字


第三步,编码

这一步分成两个部分

第一部分,Report类的编码

这部分我已经封装好,为文件“Report.cs”,可以直接使用

具体实现代码如下:(代码中有对照详细的注释)

using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Word; namespace MYNAMESPACE //这边需要换本钱身的定名空间名 { classReport { private_ApplicationwordApp= null; private_DocumentwordDoc= null; public_ApplicationApplication { get { return wordApp; } set { wordApp = value; } } public_DocumentDocument { get { return wordDoc; } set { wordDoc = value; } } //通过模板创建新文档 publicvoidCreateNewDocument(stringfilePath) { killWinWordProcess(); wordApp= new ApplicationClass(); wordApp.DisplayAlerts =WdAlertLevel.wdAlertsNone; wordApp.Visible =false; objectmissing =System.Reflection.Missing.Value; objecttemplateName =filePath; wordDoc= wordApp.Documents.Open(reftemplateName, refmissing, ref missing, ref missing,ref missing, ref missing, refmissing, ref missing, ref missing,ref missing, ref missing, refmissing, ref missing, ref missing,ref missing, ref missing); } //生存新文件 publicvoidSaveDocument(stringfilePath) { objectfileName =filePath; objectformat =WdSaveFormat.wdFormatDocument;//生存格局 objectmiss =System.Reflection.Missing.Value; wordDoc.SaveAs(reffileName, ref format, ref miss, ref miss, ref miss,ref miss, ref miss, ref miss, ref miss,ref miss, ref miss, ref miss, ref miss,ref miss, ref miss, ref miss); //*wordDoc,wordApp东西 objectSaveChanges =WdSaveOptions.wdSaveChanges; objectOriginalFormat =WdOriginalFormat.wdOriginalDocumentFormat; objectRouteDocument =false; wordDoc.Close(refSaveChanges, refOriginalFormat, refRouteDocument); wordApp.Quit(refSaveChanges, refOriginalFormat, refRouteDocument); } //在书签处插入值 publicboolInsertValue(stringbookmark, stringvalue) { objectbkObj =bookmark; if(wordApp.ActiveDocument.Bookmarks.Exists(bookmark)) { wordApp.ActiveDocument.Bookmarks.get_Item(refbkObj).Select(); wordApp.Selection.TypeText(value); return true; } returnfalse; } //插入表格,bookmark书签 publicTableInsertTable(stringbookmark, int rows, int columns,float width) { objectmiss =System.Reflection.Missing.Value; objectoStart =bookmark; Rangerange =wordDoc.Bookmarks.get_Item(refoStart).Range;//表格插入位置 TablenewTable =wordDoc.Tables.Add(range,rows, columns, ref miss, refmiss); //设置表的格局 newTable.Borders.Enable =1; //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过) newTable.Borders.OutsideLineWidth=WdLineWidth.wdLineWidth050pt;//边框宽度 if(width != 0) { newTable.PreferredWidth=width;//表格宽度 } newTable.AllowPageBreaks =false; returnnewTable; } //合并单元格 表名,开始行号,开始列号,结束行号,结束列号 publicvoidMergeCell(Microsoft.Office.Interop.Word.Tabletable, int row1, int column1,int row2, int column2) { table.Cell(row1,column1).Merge(table.Cell(row2,column2)); } //设置表格内容对齐方法Align程度标的目的,Vertical垂直标的目的(左对齐,居中对齐,右对齐分袂对应Align和Vertical的值为-1,0,1) publicvoidSetParagraph_Table(Microsoft.Office.Interop.Word.Tabletable, int Align, int Vertical) { switch(Align) { case -1:table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphLeft;break;//左对齐 case 0: table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphCenter;break;//程度居中 case 1: table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphRight;break;//右对齐 } switch(Vertical) { case -1: table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalTop;break;//顶端对齐 case 0: table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalCenter;break;//垂直居中 case 1: table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalBottom;break;//底端对齐 } } //设置表格字体 publicvoidSetFont_Table(Microsoft.Office.Interop.Word.Tabletable, string fontName, double size) { if(size != 0) { table.Range.Font.Size =Convert.ToSingle(size); } if(fontName !="") { table.Range.Font.Name =fontName; } } //是否使用边框,n表格的序号,use是或否 publicvoidUseBorder(int n,bool use) { if(use) { wordDoc.Content.Tables[n].Borders.Enable =1; //允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过) } else { wordDoc.Content.Tables[n].Borders.Enable =2; //允许有边框,默认没有边框(为0时无边框,1为实线边框,,2、3为虚线边框,以后的数字没试过) } } //给表格插入一行,n表格的序号从1开始记 publicvoidAddRow(int n) { objectmiss =System.Reflection.Missing.Value; wordDoc.Content.Tables[n].Rows.Add(refmiss); } //给表格添加一行 publicvoidAddRow(Microsoft.Office.Interop.Word.Tabletable) { objectmiss =System.Reflection.Missing.Value; table.Rows.Add(refmiss); } //给表格插入rows行,n为表格的序号 publicvoidAddRow(int n, int rows) { objectmiss =System.Reflection.Missing.Value; Microsoft.Office.Interop.Word.Tabletable = wordDoc.Content.Tables[n]; for(inti = 0; i < rows; i++) { table.Rows.Add(refmiss); } } //给表格中单元格插入元素,table地址表格,row行号,column列号,value插入的元素 publicvoidInsertCell(Microsoft.Office.Interop.Word.Tabletable, int row, int column,string value) { table.Cell(row,column).Range.Text =value; } //给表格中单元格插入元素,n表格的序号从1开始记,row行号,column列号,value插入的元素 publicvoidInsertCell(int n, int row,int column, string value) { wordDoc.Content.Tables[n].Cell(row,column).Range.Text =value; } //给表格插入一行数据,n为表格的序号,row行号,columns列数,values插入的值 publicvoidInsertCell(int n, int row,int columns, string[] values) { Microsoft.Office.Interop.Word.Tabletable = wordDoc.Content.Tables[n]; for(inti = 0; i < columns; i++) { table.Cell(row,i + 1).Range.Text =values[i]; } } //插入图片 publicvoidInsertPicture(stringbookmark, stringpicturePath, floatwidth, float hight) { object miss = System.Reflection.Missing.Value; objectoStart =bookmark; ObjectlinkToFile =false; //图片是否为外部链接 ObjectsaveWithDocument =true; //图片是否随文档一起生存 objectrange =wordDoc.Bookmarks.get_Item(refoStart).Range;//图片插入位置 wordDoc.InlineShapes.AddPicture(picturePath,ref linkToFile, ref saveWithDocument, refrange); wordDoc.Application.ActiveDocument.InlineShapes[1].Width=width; //设置图片宽度 wordDoc.Application.ActiveDocument.InlineShapes[1].Height=hight; //设置图片高度 } //插入一段文字,text为文字内容 publicvoidInsertText(stringbookmark, stringtext) { objectoStart =bookmark; objectrange =wordDoc.Bookmarks.get_Item(refoStart).Range; Paragraphwp =wordDoc.Content.Paragraphs.Add(refrange); wp.Format.SpaceBefore= 6; wp.Range.Text =text; wp.Format.SpaceAfter =24; wp.Range.InsertParagraphAfter(); wordDoc.Paragraphs.Last.Range.Text ="\n"; } //杀失winword.exe进程 publicvoidkillWinWordProcess() { System.Diagnostics.Process[]processes=System.Diagnostics.Process.GetProcessesByName("WINWORD"); foreach (System.Diagnostics.Processprocess in processes) { bool b = process.MainWindowTitle==""; if (process.MainWindowTitle =="") { process.Kill(); } } } } }


第二部分,具体生成文档的编码

代码见下文:


1.首先需要载入模板


Report report =new Report();

report.CreateNewDocument(TemPath); //模板路径


2.插入一个值


report.InsertValue(“Bookmark_value”,”世界杯”);//在书签“Bookmark_value”处插入值


3.创建一个表格


Table table =report.InsertTable(“Bookmark_table”, 2, 3, 0); //在书签“Bookmark_table”处插入2行3列行宽最大的表


4.合并单元格


report.MergeCell(table, 1, 1, 1, 3); //表名,开始行号,开始列号,结束行号,结束列号


5.表格添加一行


report.AddRow(table); //表名


6.在单元格中插入值


report.InsertCell(table, 2, 1,”R2C1″);//表名,行号,列号,值


7.设置表格中文字的对齐方法


report.SetParagraph_Table(table, -1, 0);//程度标的目的左对齐,垂直标的目的居中对齐


8.设置表格字体


report.SetFont_Table(table,”宋体”, 9);//宋体9磅


9.给现有的表格添加一行


report.AddRow(1);//给模板中第一个表格添加一行


10.确定现有的表格是否使用边框


report.UseBorder(1,true); //模板中第一个表格使用实线边框


11.给现有的表格添加多行


report.AddRow(1, 2);//给模板中第一个表格插入2行