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 下載地址:http://files.cnblogs.com/cracker/Aspose.Words.rar

發佈了8 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章