您的位置:首页 > 编程语言 > C#

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

2015-06-02 15:10 686 查看
原文地址: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
.Borders.Enable =1;
//允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)


}


else


{


wordDoc.Content.Tables
.Borders.Enable =2;
//允许有边框,默认没有边框(为0时无边框,1为实线边框,2、3为虚线边框,以后的数字没试过)


}


}




//给表格插入一行,n表格的序号从1开始记


publicvoidAddRow(
int
n)


{


objectmiss =System.Reflection.Missing.Value;


wordDoc.Content.Tables
.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
;


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
.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
;


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#程序设计有所帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: