首页 > 学院 > 开发设计 > 正文

C#程序通过模板自动创建Word文档

2019-11-17 02:53:02
字体:
来源:转载
供稿:网友
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”,可以直接使用

代码如下:(有比较详细的注释)

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingMicrosoft.Office.Interop.Word;

namespaceMYNAMESPACE//这边需要换成自己的命名空间名

{

classReport

{

PRivate_applicationwordApp=null;

private_DocumentwordDoc=null;

public_ApplicationApplication

{

get

{

returnwordApp;

}

set

{

wordApp=value;

}

}

public_DocumentDocument

{

get

{

returnwordDoc;

}

set

{

wordDoc=value;

}

}

//通过模板创建新文档

publicvoidCreateNewDocument(stringfilePath)

{

killWinWordProcess();

wordApp=newApplicationClass();

wordApp.DisplayAlerts=WdAlertLevel.wdAlertsNone;

wordApp.Visible=false;

objectmissing=System.Reflection.Missing.Value;

objecttemplateName=filePath;

wordDoc=wordApp.Documents.Open(reftemplateName,refmissing,

refmissing,refmissing,refmissing,refmissing,refmissing,

refmissing,refmissing,refmissing,refmissing,refmissing,

refmissing,refmissing,refmissing,refmissing);

}

//保存新文件

publicvoidSaveDocument(stringfilePath)

{

objectfileName=filePath;

objectformat=WdSaveFormat.wdFormatDocument;//保存格式

objectmiss=System.Reflection.Missing.Value;

wordDoc.SaveAs(reffileName,refformat,refmiss,

refmiss,refmiss,refmiss,refmiss,

refmiss,refmiss,refmiss,refmiss,

refmiss,refmiss,refmiss,refmiss,

refmiss);

//关闭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);

returntrue;

}

returnfalse;

}

//插入表格,bookmark书签

publicTableInsertTable(stringbookmark,introws,intcolumns,floatwidth)

{

objectmiss=System.Reflection.Missing.Value;

objectoStart=bookmark;

Rangerange=wordDoc.Bookmarks.get_Item(refoStart).Range;//表格插入位置

TablenewTable=wordDoc.Tables.Add(range,rows,columns,refmiss,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,introw1,intcolumn1,introw2,intcolumn2)

{

table.Cell(row1,column1).Merge(table.Cell(row2,column2));

}

//设置表格内容对齐方式Align水平方向,Vertical垂直方向(左对齐,居中对齐,右对齐分别对应Align和Vertical的值为-1,0,1)

publicvoidSetParagraph_Table(Microsoft.Office.Interop.Word.Tabletable,intAlign,intVertical)

{

switch(Align)

{

case-1:table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphLeft;break;//左对齐

case0:table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphCenter;break;//水平居中

case1:table.Range.ParagraphFormat.Alignment=WdParagraphAlignment.wdAlignParagraphRight;break;//右对齐

}

switch(Vertical)

{

case-1:table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalTop;break;//顶端对齐

case0:table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalCenter;break;//垂直居中

case1:table.Range.Cells.VerticalAlignment=WdCellVerticalAlignment.wdCellAlignVerticalBottom;break;//底端对齐

}

}

//设置表格字体

publicvoidSetFont_Table(Microsoft.Office.Interop.Word.Tabletable,stringfontName,doublesize)

{

if(size!= 0)

{

table.Range.Font.Size=Convert.ToSingle(size);

}

if(fontName!="")

{

table.Range.Font.Name=fontName;

}

}

//是否使用边框,n表格的序号,use是或否

publicvoidUseBorder(intn,booluse)

{

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(intn)

{

objectmiss=System.Reflection.Missing.Value;

wordDoc.Content.Tables[n].Rows.Add(refmiss);

}

//给表格添加一行

publicvoidAddRow(Microsoft.Office.Interop.Word.Tabletable)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表