ASP.NET导出到word(还在修改中)

加引用

声明变量(不明白的话,直接复制过去)

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执行代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值