今天工作中遇到了导出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;
}

  

Aspose.Words利用Word模板导出Word文档的更多相关文章

  1. 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

    https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...

  2. C#实现按Word模板导出Word(加书签bookMark)

    本方法是针对word导出操作,需要制作好的模板文件 模板.doc 引入应用Microsoft.Office.Interop.Word 11.0  (office2003) 导出文件注意:有时候迅雷会在 ...

  3. .net core 使用NPOI填充Word模板导出Word

    最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...

  4. java根据word模板导出word文件

    1.word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量 2.将word文档另存为xml文件.编辑如下图,找到填写的占位,修改为${bcrxm}格式 3.将文件后缀名改为.ftl文 ...

  5. Aspose.Words 直接写response导出docx文档显示文件已损坏需要修复的解决办法

    使用Aspose.Words的Document.Save(HttpResponse response, string fileName, ContentDisposition contentDispo ...

  6. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?

    前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...

  7. JSP利用freemarker生成基于word模板的word文档

    利用freemarker生成基于word模板的word文档 freemarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与Web容器 ...

  8. C#通过模板导出Word的两种方法(超简单)

    方法一:使用Office的组件 使用该方法必须要安装Office 1.制作Word模板 在需要填充内容的地方增加标识符号,方便之后替换使用,例如 [项目名称],其中[]符号和中间的文字可根据个人情况进 ...

  9. 利用html模板生成Word文件(服务器端不需要安装Word)

    利用html模板生成Word文件(服务器端不需要安装Word) 由于管理的原因,不能在服务器上安装Office相关组件,所以只能采用客户端读取Html模板,后台对模板中标记的字段数据替换并返回给客户端 ...

  10. C#通过模板导出Word(文字,表格,图片)

    C#通过模板导出Word(文字,表格,图片)   C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法, ...

随机推荐

  1. Android的Handler线程切换原理

    Handler是我们在开发中经常会接触到的类,因为在Android中,子线程一般是不能更新UI的. 所以我们会使用Handler切换到主线程来更新UI,那Handler是如何做到实现不同线程之间的切换 ...

  2. Java控制台打印三角形

    for (int i = 1; i <= 5; i++) { //最上面先是五个往下一次4.3.2.1 for (int j = 5; j >= i; j--) { System.out. ...

  3. ifort + mkl + impi (全套intel)编译安装量子化学软件GAMESS 2022 R1版本

    说明:linux下编译软件都需要先配置好该软件依赖的系统环境.系统环境可以通过软件的安装说明了解,例如:readme.md等文件或网页.这个前提条件很重要!后面正式编译出错基本都可以归结到系统环境配置 ...

  4. KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障

    案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...

  5. KingbaseES V8R6集群同步模式synchronous参数配置详解

    如下图所示: 集群数据同步原理说明: synchronous参数配置测试: 集群节点信息: ID | Name | Role | Status | Upstream | repmgrd | PID | ...

  6. 使用Dockfile构建mysql镜像与初始化运行mysql容器

    使用docker 构建mysql镜像,并在容器初次创建时初始化数据 Dockerfile FROM mysql:5.7.23 MAINTAINER gradyjiang "jiangzhon ...

  7. Java八股文纯享版——篇②:并发编程

    注: 1.笔记为个人归纳整理,尽力保证准确性,如有错误,恳请指正 2.写文不易,转载请注明出处 3.本文首发地址 https://blog.leapmie.com/archives/c02a6ed1/ ...

  8. byte[]数组转换string类型

    byte[] OutData = new byte[2048];//交易返回数据 string pBusiCardInfoStr = Encoding.Default.GetString(OutDat ...

  9. Java SE 2、抽象类

    抽象类 用abstract关键字来修饰一个类时,这个类就是抽象类 ​ 访问修饰符 abstract 类名 { ​ } 用abstract关键字来修饰一个方法时,这个方法就是抽象方法 ​ 访问修饰符 a ...

  10. Python数据科学手册-前言

    读Python数据科学手册 笔记 系列 数据科学 data science https://img2022.cnblogs.com/blog/2827305/202205/2827305-202205 ...