Aspose.Words利用Word模板导出Word文档
2023-03-20 15:29:55 时间
今天工作中遇到了导出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; }
相关文章
- 从本体论开始说起——运营商关系图谱的构建及应用
- 如何成为一名数据科学家?
- 从未见过的堂兄杀了人,你的DNA是关键证据
- 20个安全可靠的免费数据源,各领域数据任你挑
- 20个安全可靠的免费数据源,各领域数据任你挑
- 阿里云李飞飞:All in Cloud时代,云原生数据库优势明显
- 基于Hadoop生态系统的一高性能数据存储格式CarbonData(性能篇)
- 大数据告诉你:10年漫威,到底有多少角色
- TigerGraph:实时图数据库助力金融风控升级
- Splunk利用Splunk Connected Experiences和Splunk Business Flow 扩大数据访问
- 大数据开发常见的9种数据分析手段
- 以免在景区看人,我爬了5W条全国景点门票数据...
- 【实战解析】基于HBase的大数据存储在京东的应用场景
- 数据科学家告诉你哪些计算机科学书籍是你应该看的
- Kafka作为大数据的核心技术,你了解多少?
- Spring Boot 整合 Redis 实现缓存操作
- 大数据学习必须掌握的五大核心技术有哪些?
- 基于Antlr在Apache Flink中实现监控规则DSL化的探索实践
- 甲骨文再次被Gartner评为分析型数据管理解决方案魔力象限领导者
- 爬取吴亦凡微博102118条转发数据,扒一扒流量的真假