Asp.net开发经验-利用Aspose.Words按模板导出Word

    估计很多开发人员都为导出Excel或者Word烦扰吧..网上有各种各样的导出方法...经常用到的方法就是画网页..例如下面的GridView导出excel的代码..这段代码虽然有效..但是其实非常不好用..不仅不能改变Excel单元的大小..而且还有乱七八糟的排版问题..这篇文章说得是导出Word的..扯到Excel有点远了,但是主要说明的是导出方法千奇百怪..大家要选择一种好的有效的..不要盲目的做..到时候觉得不行的时候又要改。今天我和大家说得是Aspose组件,不仅可以导出Excel还能导出Word和其他不同格式的...好了进入正题.

		System.Web.HttpContext.Current.Response.Clear();
			System.Web.HttpContext.Current.Response.Buffer = true;
			System.Web.HttpContext.Current.Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
			System.Web.HttpContext.Current.Response.Write("<head>");
			System.Web.HttpContext.Current.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>");//解决中文乱码问题,导出数据在20行内容易出现乱码
			System.Web.HttpContext.Current.Response.Write("<!--[if gte mso 9]><xml>");
			System.Web.HttpContext.Current.Response.Write("<x:ExcelWorkbook>");
			System.Web.HttpContext.Current.Response.Write("<x:ExcelWorksheets>");
			System.Web.HttpContext.Current.Response.Write("<x:ExcelWorksheet>");
			System.Web.HttpContext.Current.Response.Write("<x:Name>sheet1</x:Name>");
			System.Web.HttpContext.Current.Response.Write("<x:WorksheetOptions>");
			System.Web.HttpContext.Current.Response.Write("<x:Print>");
			System.Web.HttpContext.Current.Response.Write("<x:ValidPrinterInfo/>");
			System.Web.HttpContext.Current.Response.Write("</x:Print>");
			System.Web.HttpContext.Current.Response.Write("</x:WorksheetOptions>");
			System.Web.HttpContext.Current.Response.Write("</x:ExcelWorksheet>");
			System.Web.HttpContext.Current.Response.Write("</x:ExcelWorksheets>");
			System.Web.HttpContext.Current.Response.Write("</x:ExcelWorkbook>");
			System.Web.HttpContext.Current.Response.Write("</xml>");
			System.Web.HttpContext.Current.Response.Write("<![endif]--> ");

 

 我们要导出如下图样式的Word

首先我们来画模板..其实很简单的...模板就是下面这幅图.我来简单的介绍一下 <TableStart:All> 是表示从名为All的 DataTable 里面获取数据 <TableEnd:All>就是结束的位置,中间的<jylx>  <my> 之类的都是名为All这个的DataTable的列名.中间还有另外一个<TableStart:Item> <TableStart:Item> 同理这个是名为Item的DataTable 他们中间的<mc> <sl>就是Item这个表的列名。

上面介绍了怎么画模板,我突然忘了告诉大家如何插入那些标签了...其实很简单只要在Word里面插入域即可..如下图所示.

下面我来说说代码应该如何写,首先构造一个DataSet包含两个DataTable一个叫All 一个叫Item..添加代码大致如下,之后就是填充这2个DataTable即可

     private DataSet GetOneDs()
        {
            DataTable dt1 = new DataTable("All");

            dt1.Columns.Add("jylx");
    
            dt1.Columns.Add("my");
            dt1.Columns.Add("mc");//
            dt1.Columns.Add("mz");//
            dt1.Columns.Add("mjz");//
            //dt1.Columns.Add("mqt");//其他

            dt1.Columns.Add("sjbm");//
            dt1.Columns.Add("yqwcrq");//要求完成日期
            dt1.Columns.Add("jyyj");//检验依据

            dt1.Columns.Add("szq");//自取
            dt1.Columns.Add("sdzwd");//电子文档
            dt1.Columns.Add("sqt");//其它

            dt1.Columns.Add("ztwz");//完整
            dt1.Columns.Add("ztqx");//缺陷
            dt1.Columns.Add("ztms");//描述

            dt1.Columns.Add("sjbmfzr");//送检部门负责人
            dt1.Columns.Add("syrrq");//送检人/日期
            dt1.Columns.Add("jybmfzr");//检测部门负责人
            dt1.Columns.Add("jyrrq");//接样人/日期

            DataRow dr1 = dt1.NewRow();

            dr1["my"] = "";//
            dr1["mc"] = "";//
            dr1["mz"] = "";//
            dr1["mbz"] = "";//

            dr1["ztwz"] = "";//完整
            dr1["ztqx"] = "";//缺陷


            dr1["sdzwd"] = "";//完整
            dr1["szq"] = "";//缺陷
            dt1.Rows.Add(dr1);


            DataTable dt2 = new DataTable("Item");
            dt2.Columns.Add("bh");
            dt2.Columns.Add("mc");
            dt2.Columns.Add("sl");
            dt2.Columns.Add("rq");

            DataSet ds = new DataSet();
            ds.Tables.Add(dt1);
            ds.Tables.Add(dt2);



            return ds;
        }

最后只要根据DataSet填充模板输出即可..代码如下

       Document doc = new Document(strPath);

            doc.MailMerge.ExecuteWithRegions(ds);
            doc.Save(Page.Response, "C010.doc", ContentDisposition.Attachment, SaveOptions.CreateSaveOptions(SaveFormat.Doc));

 

由于这篇文章的报表是内部报表我不方便公开代码..所以我尽量写的详细了..希望大家理解..有什么不懂可以留言探讨.

Aspose.Words 下载地址:https://files.cnblogs.com/cracker/Aspose.Words.rar

posted on 2012-07-21 19:06  豆浆咖啡  阅读(11618)  评论(21编辑  收藏  举报