今天工作中遇到了导出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. Tablesaw——Java统计、机器学习库

    资源 java二维数组处理可可视化库 https://github.com/jtablesaw/tablesaw plotly JS库的Java封装 https://github.com/jtable ...

  2. Html飞机大战(五):主角登场(英雄类编辑)

    好家伙, 遇到了一些非常奇怪的bug index.html:179 Uncaught TypeError: Failed to execute 'drawImage' on 'CanvasRender ...

  3. 数据卷之Docker File

    DockerFile 是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本.后面再详细了解 DockerFile ! 1.我们在宿主机 /home 目录下新建一个 docker-tes ...

  4. grub2配置文件丢失如何修复

    实验操作准备 此步骤因实验需要所做,系统开机属grub界面无需此步! lsblk命令为了查看根分区挂载在什么位置 rm -rf /boot/grub2/grub.cfg命令为删除grub2配置文件到达 ...

  5. ClickHouse(05)ClickHouse数据类型详解

    ClickHouse属于分析型数据库,ClickHouse提供了许多数据类型,它们可以划分为基础类型.复合类型和特殊类型.其中基础类型使ClickHouse具备了描述数据的基本能力,而另外两种类型则使 ...

  6. OpenFOAM编程 | Hello OpenFOAM

    写在前面 OpenFOAM 是一个非常好用的开源程序包,笔者一直在研究和使用,其编程语言是笔者非常喜欢使用的 C++.但是笔者不是很喜欢 OpenFOAM 自己的构建工具 wmake,更倾向于使用 C ...

  7. Codeforces Round #821(Div.2) (A-C) 题解

    Codeforces Round #821(Div.2) (A-C) A.Consecutive Sum 大致题意 给定一组共 n 个数据 ,如果俩个数的下标在 mod k 意义下同余,则可以交换a[ ...

  8. 部署一个生产级别的 Kubernetes 应用(以Wordpress为例)

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247487811&idx=1&sn=67b39b73 ...

  9. tcp_tw_recycle参数引发的系统问题

    文章转载自: https://blog.csdn.net/zhuyiquan/article/details/68925707

  10. PostgreSQL 语法

    进入命令行工具,我们可以使用 \help 来查看各个命令的语法 : postgres-# \help <command_name> 例如,我们查看下 select 语句的语法: postg ...