C#程序通过模板自动创建Word文档
引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决!
现通过具体的示例演示具体的步骤:
第一步,制作模板
1,新建一个文档,文档内容如下:
2,在相应位置插入书签;将鼠标定位到要插入书签的位置,点击“插入”>“书签”,弹出对话框,输入书签名,点击“添加”按钮,书签位置如图3所示
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列分别插入数据
12,插入图片
string picturePath = @"C:\Documents and Settings\Administrator\桌面\1.jpg";
report.InsertPicture("Bookmark_picture",picturePath, 150, 150); //书签位置,图片路径,图片宽度,图片高度
13,插入一段文字
string text = "长期从事电脑操作者,应多吃一些新鲜的蔬菜和水果,同时增加维生素A、B1、C、E的摄入。为预防角膜干燥、眼干涩、视力下降、甚至出现夜盲等,电 脑操作者应多吃富含维生素A的食物,如豆制品、鱼、牛奶、核桃、青菜、大白菜、空心菜、西红柿及新鲜水果等。";
report.InsertText("Bookmark_text",text);
14,最后保存文档
report.SaveDocument(RepPath); //文档路径
第四步,运行程序生成文档,并查看生成的文档
C#程序通过模板自动创建Word文档的更多相关文章
- C#实现通过模板自动创建Word文档的方法
原文地址:http://www.jb51.net/article/55332.htm 本文实例讲述了C#实现通过模板自动创建Word文档的方法,是非常实用的技巧.分享给大家供大家参考.具体实现方法 ...
- [java,2017-05-04] 创建word文档
package test; import java.text.SimpleDateFormat; import java.util.Date; import com.aspose.words.Data ...
- 在C#中创建word文档
在下面文档中 首先引用word组件:Microsoft.Office.Interop.Word 在头文件中写上 using Word = Microsoft.Office.Interop.Word; ...
- Java 后台创建word 文档
---恢复内容开始--- Java 后台创建 word 文档 自己总结 网上查阅的文档 分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6 方式一. ...
- OpenXml SDK 2.0 创建Word文档 添加页、段落、页眉和页脚
using (WordprocessingDocument objWordDocument = WordprocessingDocument.Create(@"C:\********.doc ...
- 自动创建xml文档
自动创建xml文档 import xml.etree.ElementTree as ET print(dir(ET)) #ET里面有Element方法 root = ET.Element(" ...
- Python批量创建word文档(2)- 加图片和表格
Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.要求在文档开始处给出banner条,价格日期等用表格表示.最后贴上自己的联系 ...
- Python批量创建word文档(1)- 纯文字
Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.最后贴上自己的联系方式.代码如下: 1 ''' 2 #python根据需求新 ...
- 使用freemarker模板引擎生成word文档的开发步骤
1.准备模板文档,如果word文档中有表格,只保留表头和第一行数据:2.定义变量,将word文档中的变量用${var_name}替换:3.生成xml文件,将替换变量符后的word文档另存为xml文件: ...
随机推荐
- Raspberry Pi3 ~ 配置网络
Rpi3 有两个网卡 一个无线wlan 一个有线 eth0 无线的只需要在右上角的那个配置里面添加就行 有线的需要设置下静态IP.dns.等 在raspbain图形化界面里面 设置 Network P ...
- 【LeetCode】198 - House Robber
You are a professional robber planning to rob houses along a street. Each house has a certain amount ...
- 通过VMware Tools 将主机windows的目录共享给linux虚拟机
之前有写过 本地虚拟机挂载windows共享目录搭建开发环境 这篇,里面讲通过使用samba来实现网络共享 最近发现其实完全不用这么麻烦,VMware tools就可以帮助我们轻松的共享文件夹 这里引 ...
- hdu5072-Coprime(容斥原理)
题意:给N个互不相同的数,选择出两两互质或者两两不互质的三个数,有多少种选法. 题解:一共有C(N,3)中选择方式,减去不符合要求的,剩下的就是答案. 详见 http://blog.csdn.net/ ...
- Spark RDD概念学习系列之RDD的依赖关系(宽依赖和窄依赖)(三)
RDD的依赖关系? RDD和它依赖的parent RDD(s)的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency). 1)窄依赖指的是每 ...
- CXF整合Spring发布WebService实例
一.说明: 上一篇简单介绍了CXF以及如何使用CXF来发布一个简单的WebService服务,并且介绍了客户端的调用. 这一篇介绍如何使用CXF与spring在Web项目中来发布WebService服 ...
- Hibernate配置
Ⅰ.Hibernate配置前提工作(E:\): (一).解压4个工具包 工具如下:apache-ant-1.6.2-bin.zip →→ apache-ant- ...
- python 加密解密
1. 使用base64 s1 = base64.encodestring('hello world') s2 = base64.decodestring(s1) print s1, s2 结果 1 2 ...
- Python基础 数字、字符串、列表、元组、字典
Number(数字)---> int.float.complex(复数) class int 在Python3中,整形(int)就是常见的整数:1,100,500,1000...... 浮点型( ...
- IE浏览器在虚拟机中无法正常显示字符
今天在win7虚拟机中安装IE10之后,打开任何页面都无法显示文字,自己找了一些资料也没有什么发现,虚拟机其他的程序都能很好的工作,只有IE10有问题,于是初步怀疑是IE10设置的问题.于是打开IE的 ...