Aspose.Words利用Word模板导出Word文档
今天工作中遇到了导出Word文档的问题,但是在搜索Aspose.Words 导出Word文档时发现网上的方法都是有头没尾的,有的只有一小段实例,让人看着摸不着头脑。借着https://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;
        }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号