添加引用
声明变量(不明白的话,直接复制过去)
Microsoft.Office.Interop.Word.Application wApp = null;
Microsoft.Office.Interop.Word.Document wDoc = null;
object oMissing = System.Reflection.Missing.Value;
object oEndOfDoc = "\\endofdoc";
//创建一个range对象
Microsoft.Office.Interop.Word.Range range = null;
打开一个空word文档
//创建一个word文档,
wApp = new Word.Application();
//文档副标题,没有为word文档设置标题时,默认显示副标题
wApp.Caption = "Word导出文档";
//显示word文档
wApp.Visible = true;
//创建document对象,让你可以对word进行编辑,没有此方法,你会发现你打开的word文档没有页面让你编辑
//传入的oMissing相当于传入一个null
wDoc = wApp.Documents.Add(ref oMissing, ref oMissing, ref oMissing, ref oMissing);
打开一个word模板
//创建一个word文档,
wApp = new Word.Application();
//文档副标题,没有为word文档设置标题时,默认显示副标题
wApp.Caption = "Word导出文档";
//显示word文档
wApp.Visible = true;
//导入模板名称
object temp = Server.MapPath("temp/doc");
//在你创建的word文档中打开模板
wDoc = wApp.Documents.Add(ref temp, ref oMissing, ref oMissing, ref oMissing);
编辑word文档
对没有太多要求的word文档,可以从头编辑到尾
//将range对象指向word文档末尾
//range对象表示文档中的起始字符和终止字符中间的一个连续范围
//Bookmarks表示文档中的书签集合,Bookmarks的get_Item()可以获取对应书签名的书签对象
//有方法需要传入一个range时,可调用下面方法创建一个定位到word文档末尾的range
range=wDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
//写入内容
//当你使用range.Text来写入内容时,光标是不会进行移动的
range.Text = "";
//字体大小
range.Font.Size = 0;
//字体加粗,0代表不加粗,非0加粗
range.Font.Bold = 1;
//所选字体颜色
range.Font.Color = Word.WdColor.wdColorBlack;
//所选字体种类
range.Font.Name = "黑体";
//设置字体水平居中
range.ParagraphFormat.Alignment=
Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
//插入图片
//此方法的参数说明
//1string类型代表插入图片的路径
//2object类型,传入一个oMIssing即可
//3object类型,传入一个oMIssing即可
//4object类型,传入一个range对象,表示图片插入的位置。
wApp.ActiveDocument.InlineShapes.AddPicture(FileName, ref oMissing , ref oMissing , ref oMissing );
//图片宽度
wDoc.Application.ActiveDocument.InlineShapes[1].Width = 150f;
//图片高度
wDoc.Application.ActiveDocument.InlineShapes[1].Height = 60f;
添加表格
//创建一个表格
//此方法参数说明
//1range类型,传入创建表格所在的
//2int类型,表格行数
//3int类型,表格列数
Microsoft.Office.Interop.Word.Table table = wDoc.Tables.Add(range, rows,cols , ref oMissing, ref oMissing);
//表格的边框默认是不显示
//表格的外边框显示
table.Borders.OutsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
//表格的内边框显示
table.Borders.InsideLineStyle = Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
//设置表格单元格的边框显示
表格的单元格边框Borders属性有6个元素,wdBorderBottom、wdBorderDiagonalDown、wdBorderDiagonalUp、wdBorderHorizontal、wdBorderLeft、wdBorderRight、wdBorderTop 或 wdBorderVertical,
当我们需要只让单元格的上边框显示时,我们可以这样设置
table.Cell(row,cols).Borders[Microsoft.Office.Interop.Word.WdBorderType.wdBorderTop].LineStyle=Microsoft.Office.Interop.Word.WdLineStyle.wdLineStyleSingle;
//表格第row行的高度
table.Columns[row].Width = 100;
//表格第col列的宽度
table.Rows[col].Height = 100;
//Table.Cell(row,col)方法可以获取表格的row行,col列的单元格
//合并单元格
//现在将同一行的(2,2)和(2,3)2个单元格合并
table.Cell(2,2).Merge(table.Cell (2,3));
现在可以看出,同一行的单元格是依次增大排列,即使合并单元格之后,该顺序也不会变
//现在将同一列的(2,3)和(3,2)合并
table.Cell(2, 2).Merge(table.Cell (3,2));
现在可以看出,当我们将同一列的2个单元格合并之后,合并之后的单元格cell即为处于上面列的单元格cell,而下面列单元格则消失掉,你无法访问到,除非你将2行同一列的单元格全部合并,而这样做,你会发现你的表格少了一行。
//多个单元格合并,纵向合并
table.Cell(row, col).Select();
object moveUnit = Microsoft.Office.Interop.Word.WdUnits.wdLine;
object moveCount = 3;
object moveExtend = Microsoft.Office.Interop.Word.WdMovementType.wdExtend;
wApp.Selection.MoveDown(ref moveUnit, ref moveCount, ref moveExtend);
wApp.Selection.Cells.Merge();
//拆分单元格,拆分为1行2列
object num = 1;
object row = 2;
table.Cell(2, 3).Split(ref num,ref row);
//添加一行
//当表格中有纵向合并的单元格,此方法报错
object row =table.Rows[1];
table.Rows.Add(ref row);
当你需要对不同的页面设置不同的样式的时候
当你在word中对不同的页面设置不同的方向时
说明:整个word文档默认是一个节,在ASP.NET的任何地方对word文档的页面进行设置,相当于对所在节进行页面设置,最终,我们会看到所有的页面都变成了我们所设置的样式,而不是,不同页面的不同设置。
我们需要对word文档添加节点,将word文档分为几个节,在对不同的节设置样式
添加一页
object newPage = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;
wApp.Selection.InsertBreak(ref newPage);
写入内容
//此方法可以在word文档的特定位置写入数据,同时将光标移动到写入内容的结尾
//与range.text相比,range是一个对象,text是range的一个属性,range.text相当于给range赋值,如果我们这样写:range.text=“第一次赋值”;range.text=“第二次赋值”;最终我们只会看到“第二次赋值“;而当我们这样写: Selection.TypeText("第一次赋值");wApp.Selection.TypeText("第二次赋值");则会看到“第一次赋值”“第二次赋值”
wApp.Selection.TypeText("");
//为刚才写入的内容添加样式
//你要注意:当我们写下wApp.Selection.TypeText("");这行代码时,光标已经离开了你刚才所写入的内容,而wApp.Selection会获取光标当前所在的对象,所以当你接下来写入下面的代码时,你实际上是在对后面一个对象设定样式,所以我们需要将内容样式的设定代码写在内容添加之前.而且,你不能使用wApp.Selection.range来获取你所认为固定位置的range对象,因为,它获取的时光标所在位置的对象,当光标移动后,它所获取的对象位置也会跟着改变,最终你得到的是光标最后所在位置的对象
wApp.Selection.Font.Color = Microsoft.Office.Interop.Word.WdColor.wdColorBlue;
wApp.Selection.Font.Size = 12;
//你固然可以使用range=wDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;来重新定位到word文档末尾,但是当你需要对word文档某个特定位置写入内容时,上面方法就无法实现了。
例如:
我写入下面代码
object newPage = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;
wApp.Selection.InsertBreak(ref newPage);
wApp.Selection.InsertBreak(ref newPage);
这样我的word文档就有3个页面,然后我要向每个页面分别加入一个标题,那代码就会变成这样
//添加标题一
wApp.Selection.Font.Size = 20;
wApp.Selection.Font.Bold = 1;
wApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
wApp.Selection.TypeText("标题一");
object newPage = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;
//插入一个页面:第二页
wApp.Selection.InsertBreak(ref newPage);
//添加标题二
wApp.Selection.Font.Size = 20;
wApp.Selection.Font.Bold = 1;
wApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
wApp.Selection.TypeText("标题二");
//插入一个页面:第三页
wApp.Selection.InsertBreak(ref newPage);
//添加标题三
wApp.Selection.Font.Size = 20;
wApp.Selection.Font.Bold = 1;
wApp.Selection.ParagraphFormat.Alignment = Microsoft.Office.Interop.Word.WdParagraphAlignment.wdAlignParagraphCenter;
wApp.Selection.TypeText("标题三");
//如果你在第二页写入太多东西,以致超过了一页的容量,那word会再打开一个页面来保存你所写入的内容,而原来第三页的内容就会依次后移
//换行
wApp.Selection.TypeParagraph();
wApp.Selection.TypeText("\n");
//如果你的导出的word文档拥有固定的格式,你可以先创建一个与你导出word文档拥有同样格式的word文档作为模板,然后导入,代码参考上面。
你可以在需要的地方插入一个书签
然后你就可以通过
object obj = "书签名";
Microsoft.Office.Interop.Word.Range range = wDoc.Bookmarks.get_Item(ref obj).Range;
这样你就可以在刚才你所插入书签的地方写入内容了,如果你对书签所在位置设置了样式,样式也会保留。
你可以通过录制宏,来查看word的vb实现代码
开发工具----à录制宏
然后,你可以按你希望的对word进行操作,在点击停止录制
点击宏
选择刚才录制的宏---à点击编辑
你就可以看到刚才操作的vb执行代码。