概述
前一段时间在搞.net的一个项目,其中要求输出word和Excel,在网上找了找,常用的一些操作都有,不过我们用到了一些不常用的,这里一起总结总结。这里有两个自己认为比较好的小方法:1.这里如果项目中的输出的文档的形式是相对固定的,用模板文件去创建要输出的文档是个好的选择,这样输出的格式和速度都好于用程序动态输出。2.如果有些输出要求找不到可利用的有效代码,不防在office中录制个宏,参照VB的代码去写。
C# 进行Word的操作
C# 操作Word时需要添加的引用
using Microsoft.Office.Interop.Word;
Microsoft.Office.Interop.Word.Application wordApp = null;
Microsoft.Office.Interop.Word.Document wordDoc = null;
打开Word文档
public static bool CreateWordDoc(stringfileName)
{
filePath = fileName;
if(wordApp == null)
{
wordApp = new Microsoft.Office.Interop.Word.Application();
}
objectpath = templateFileName;
objectmissing = System.Reflection.Missing.Value;
objectreadOnly = false;
try
{
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
wordDoc =wordApp.Documents.Open(ref path, ref missing, refreadOnly, ref missing, refmissing, ref missing, refmissing, ref missing, refmissing, ref missing, refmissing, ref missing, refmissing, ref missing, refmissing, ref missing);
// wordDoc =wordApp.Documents.Add(Type.Missing, Type.Missing, Type.Missing,Type.Missing);//根据模板创建Word文档
returntrue;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
wordApp = null;
wordDoc = null;
returnfalse;
}
}
书签快速定位
若是按照模板文件去创建输出的Word文档,其中可以很快的进行word文档的输出,对于定位叫困难的可以使用书签快速找到要插入或者替换的位置。
Bookmarks bks = wordDoc.Bookmarks;
bks[2].Range.Text = “This is the second Bookmark”;
动态创建表格
有时候要生成的Word文档格式相不固定,需要根据实际情况去动态输出,动态输出的过程可以和我们手工编辑Word文档一样,有一定的顺序,最合乎我们思维的就是从头至尾的去用程序向Word文档中写数据。
Word中动态创建表格,如果连续创建表格可能会产生表格嵌套的问题,这个问题的产生主要是因为插入表格的位置没有准确的定位造成的。因此在需要连续插入多个表格的时候,在插入时要保证光标的位置是我们所期望的,API中有光标定位的方法。
wordApp.Selection.EndKey(WdUnits.wdStory,);EndKey()方法有可以接受两个可选参数,第一个参数是光标移动至末尾的单元,类型为:Microsoft.Office.Interop.Word.WdUnits
第二个参数指定是否为扩展,是的话光标移动过程中的内容被选中。
因此为了避免产生表格嵌套的问题,在按顺序生成是,先将光标移动至文档的末尾,然后在另起一行进行表格的插入就不会产生问题了。如下面的方法中插入指定行数和列数的一个表格,同时对表格的样式进行设置。这样就可以创建形模板表格。
public static Table CreatTable(introws, int columns)
{
if(wordDoc != null)
{
wordApp.Selection.EndKey(WdUnits.wdStory);// 光标移动至文档的末尾
wordApp.Selection.TypeParagraph();//另起一段
Table t = wordDoc.Tables.Add(wordApp.Selection.Range,rows, columns, Type.Missing, Type.Missing);
t.AllowAutoFit = true;//允许自适应大小
t.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter;//设置单元格竖直方向居中
t.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle;//设置表格外边框样式
t.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;//设置表格内边框样式
t.Range.Font.Size=11;//设置单元格字体大小为默认大小 11
t.Range.Font.Bold = 0;//设置单元格字体加粗样式为:无,即不加粗
t.Rows[1].HeadingFormat = -1;//设置换页表头重复
t.Rows[1].Range.Bold = 2;//设置表头行字体加粗
return t;
}
else
{
returnnull;
}
}
复制单元格
复制一个单元格到另一个单元格中,下面的代码实现了将第四行第一列的内容复制都第四行第二列中去
先复制要复制的的单元格:Table.Cell(4,1).Range.Copy(Type.Missing);
然后将光标移动至要粘贴的单元格:Table.Cell(4,2).Select();
粘贴wordApp.Selection.Paste();
单元格写入内容
table.Cell(1, 1).Range.Text= "第一行第一列";//向表格第一行第一列中写入内容
合并单元格
table.Cell(2, 1).Merge(table.Cell(2,2))//将表格中的第二行的前两个单元格合并
向文档中插入图片
Word中的表格,单元格,段落,行等都实现了Range接口,Range接口中的AddPicture()方法可以插入图片,如在表格中的第三行第一列的单元格中插入一张图片
Table.Cell(3,1).Range.InlineShapes.AddPicture("C:\Users\Green\Desktop\ cat.png");
生成目录
有时候需要根据生成的内容动态的生成目录,生成目录的过程和我们手动生成目录的过程很相似,设置好不同得标题后,将光标移动至要插入目录的地方,选择目录。
那么用程序如何生成目录呢?大致可以分为两步:
第一步:设置标题的级别和样式
下面的方法可以在写Word文档时,指定目录中各级标题的样式,方法中只简单的加了两级标题,按顺序输出时,在需要设置标题的地方调用此方法,指定要输出的标题的内容和标题的级别即可。
public static void WriteHeadLine(stringtext, WdOutlineLevel level)
{
float fontSize = level.Equals(WdOutlineLevel.wdOutlineLevel1) ? 15f : 12f;
int fontBold = level.Equals(WdOutlineLevel.wdOutlineLevel1) ? 3 : 2;
wordApp.Selection.EndKey(WdUnits.wdStory);
wordApp.Selection.TypeParagraph();
wordApp.Selection.Paragraphs.OutlineLevel = level;
wordApp.Selection.Font.Size = fontSize;
wordApp.Selection.Font.Bold = fontBold;
wordApp.Selection.TypeText(text);
}
第二步:在正文部分输出完成后,将光标定位至要生成目录的页的指定位置(即目录生成的起始位置),生成目录即可。
//下面的代码将光标移动至文档的第二页,具体在什么地方输出目录,就将光标移动至什么地方
wordApp.Selection.GoTo(WdGoToItem.wdGoToPage,Type.Missing,2, Type.Missing);
生成目录
wordApp.ActiveDocument.TablesOfContents.Add(wordApp.Selection.Range,true, "1","3", Type.Missing,"", true,true, Type.Missing,true, true, true);
wordApp.Selection.InsertBreak(WdBreakType.wdLineBreak);
此方法的具体参数可以参考API中方法的参数说明,也可以录制宏手动生成目录,并设置目录的格式,然后参照VB代码进行调整。
文件保存操作
可以使用wordDoc.SaveAs()方法执行另存为操作,或者wordDoc.Save()方法进行保存,具体SavaAs()方法的参数可以参看API中方法的参数描述
关闭Word应用程序和打开的Word文档
public static void Close()
{
objectmissing = System.Reflection.Missing.Value;
try
{
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;//设置不弹出提示消息
if(wordDoc != null)
{
wordDoc.Close(ref missing, refmissing, ref missing);
//wordDoc.Close(refmissing, ref missing, ref missing);
wordDoc = null;
}
if(wordApp != null)
{
wordApp.Quit(ref missing, refmissing, ref missing);
}
//wordApp.Quit()不能真正退出打开的应用时(没有仔细研究为啥不能退出),使用下面的方法,可以完全退出应用程序 这是在网上看到一个方法,确实有效
System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
wordApp = null;
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
工作过程中在CSDN和博客园中看过不少前辈的帖子,很有启发。这里旨在总结自己的工作,有错误的地方还望各位大侠指出,讨论共同进步。
最后
以上就是欣喜豌豆为你收集整理的C#输出Word文档C# 进行Word的操作的全部内容,希望文章能够帮你解决C#输出Word文档C# 进行Word的操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复