C#实现通过模板自动创建Word文档的方法

xiaoxiao2021-02-28  57

转载自:http://www.jb51.net/article/55332.htm

本文实例讲述了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行   12.给现有的表格插入一行数据 string[] values={"英超", "意甲", "德甲","西甲", "法甲" }; report.InsertCell(1, 2, 5,values); //给模板中第一个表格的第二行的5列分别插入数据   13.插入图片 string picturePath = @"C:\Documents and Settings\Administrator\桌面\1.jpg"; report.InsertPicture("Bookmark_picture",picturePath, 150, 150); //书签位置,图片路径,图片宽度,图片高度   14.插入一段文字 string text = "长期从事电脑操作者,应多吃一些新鲜的蔬菜和水果,同时增加维生素A、B1、C、E的摄入。为预防角膜干燥、眼干涩、视力下降、甚至出现夜盲等,电 脑操作者应多吃富含维生素A的食物,如豆制品、鱼、牛奶、核桃、青菜、大白菜、空心菜、西红柿及新鲜水果等。"; report.InsertText("Bookmark_text",text);   15.最后保存文档 report.SaveDocument(RepPath); //文档路径   第四步,运行程序生成文档,并查看生成的文档

希望本文所述对大家的C#程序设计有所帮助。

转载请注明原文地址: https://www.6miu.com/read-79086.html

最新回复(0)