Aspose.Words利用Word模板導出Word文檔

      今天工作中遇到了導出Word文檔的問題,但是在搜索Aspose.Words 導出Word文檔時發現網上的方法都是有頭沒尾的,有的只有一小段實例,讓人看着摸不着頭腦。藉著//www.cnblogs.com/cracker/archive/2012/07/21/AspnetExportWord.html這篇文章,把功能給做了出來,在此做個筆記。

       利用Aspose.Words導出Word文檔最重要的就是模板的建立。

       模板設計的方法如下:

      1.先建立好模板

                         

 

 

 

 

       2.在模板中插入     來使數據可以正確被替換。TableStart:All 表示表中所有的綁定數據從這個地方開始,必須要有TableEnd:All做為結束。 表格中循環部分的數據則是由«TableStart:Item»«列名»,«列名»«TableEnd:Item»結束 ,中間部分則只需要«列名»即可

        在模板中插入域的方法如下:(office2016版本)

        ①:位置 :插入–文檔部件–域

       

 

        ②: 域 中類型選擇郵件合併、域名選擇MergeField,然後在右邊③域名中輸入綁定的名稱。到此模板建立就完成了。

 

 

 

 

接下來的代碼部分:

        public KeyValuePair<string, byte[]> DownWord(int sysNo)
        {
            var path = $"{hostingEnvironment.ContentRootPath}\\XXXX.doc";

            if (!File.Exists(path))
            {
                throw new FriendlyException("文件不存在");
            } 

            var doc = new Aspose.Words.Document(path); 
            
            //ds指DataSet,已經組裝好的DataSet
            //利用ds數據替換模板中的數據
            doc.MailMerge.ExecuteWithRegions(ds);

            byte[] content = null;
            using (var ms = new MemoryStream())
            {
                doc.Save(ms, Aspose.Words.SaveFormat.Doc);
                content = ms.GetBuffer();
            }

            return new KeyValuePair<string, byte[]>(string.Format("{0}_{1}.doc", "xxxx導出", DateTime.Now.ToString("yyyy_MM_dd")), content);
        } 

  組裝數據的方法

private DataSet GetOneDs(MeetingModel model, List<C2MeetingSignModel> emps)
        {
            DataTable dt1 = new DataTable("All");//對應列表的中的 TableStart:All
            dt1.Columns.Add("meetingDate"); 
            dt1.Columns.Add("applyEmployeeName");
            dt1.Columns.Add("meetingTitle");
            dt1.Columns.Add("applyDeptName");
            dt1.Columns.Add("meetingName");
            DataRow dr1 = dt1.NewRow();

            dr1["meetingDate"] = model.ApplyBeginTime.Value.ToString("yyyy-MM-dd HH:mm:ss") + "至" + model.ApplyEndTime.Value.ToString("yyyy-MM-dd HH:mm:ss");
dr1["applyEmployeeName"] = model.ApplyEmployeeName;// dr1["meetingTitle"] = model.MeetingTitle;// dr1["applyDeptName"] = model.ApplyDeptName;// dr1["meetingName"] = model.MeetingName;// dt1.Rows.Add(dr1);
DataTable dt2 = new DataTable("Item");//對應列表的中的 TableStart:Item dt2.Columns.Add("sort"); dt2.Columns.Add("DeptName"); dt2.Columns.Add("Name"); int sort = 0; if (emps.Count <= 0) {
          //為了防止導出的時候導出了綁定的模板,如果導出的模板中沒有數據會默認導出綁定模板 var row = dt2.NewRow(); row[0] = ""; row[1] = ""; row[2] = ""; dt2.Rows.Add(row); } else { foreach (var item in emps) { sort++; var row = dt2.NewRow(); row[0] = sort; row[1] = item.DeptName; row[2] = item.EmpName; dt2.Rows.Add(row); } } DataSet ds = new DataSet(); ds.Tables.Add(dt1); ds.Tables.Add(dt2); return ds; }

  

 

Tags: