前言:  

这段时间因为业务需求,需要做一个word 导出,表单式的那种,因为之前也做过NPOI 操作 Excel 这类型的问题,所以总以为word 导出应该挺简单的,一直没有研究这块,汗颜,天真大意了。查询了一批这样的资料,当然不可能穷极信息,所以选择了Aspose.Word 。自己总结了一点经验,也是在学习的时候写的,留下来给自己做个纪念。(话说我这记性真心烂,有知道怎么治的,求私信,求偏方)。


使用场景:

  • 第一种:普通简单的导出word 一般是用于格式固定的,没有动态数据参与的。
  • 第二种:就是 有动态数据参与的,比如要生成一个员工的工作经历,需要每一次的工作生成一条数据。

实现思路:

  • 第一种有两种实现思路:书签,域。
  • 第二种个人觉得只能通过代码来生成Cell一个一个单元格来堆叠。

具体操作:

  • 书签
    1.  新建一个word,随便画一个Table。
    2. 一个萝卜一个坑的吧书签给设置好。下来就是代码阶段。
      #region 使用书签替换模式
      
                  Bookmark bookmark = doc.Range.Bookmarks["dier"];
      
                  if (bookmark != null)
      {
      bookmark.Text = "男";
      } bookmark = doc.Range.Bookmarks["tel"]; if (bookmark != null)
      {
      bookmark.Text = "1862029207*";
      } #endregion doc.Save("D://Test.doc");

6. 以上就是书签的使用了,虽然我只填了两个坑。

昨天写了一半,然后觉得再看看,现在再添两个方法。来自 

        首先得提一下 域  模板的制作,如图:

        

      比如姓名后面的《》不是手动输入上去的,正确的操作是:Ctrl+F9

                       

然后右键编辑域

             

            以上!!!模板完事了。

      下面记录一下应用上面的模板生成word。      

        public void Yu_ShuZu()
{
string fielname = Server.MapPath("../UploadFile/file_can_not_del/word_yu.docx"); Document doc = new Document(fielname); #region 使用数组 //使用数组
String[] fieldNames = new String[] { "Name", "Age", "BirthDay", "Sex" }; Object[] fieldValues = new Object[] { "张三", "", "1988-09-02", "男" }; //合并模版,相当于页面的渲染
doc.MailMerge.Execute(fieldNames, fieldValues);//Execute(); #endregion doc.Save("D://yu_ShuZu.docx"); //输出到前端
//doc.Save(Page.Response, "C010.doc", ContentDisposition.Attachment, SaveOptions.CreateSaveOptions(SaveFormat.Doc));
}

      然后输出:

        

      以上是以数组为数据源输出,下面说一下以DataTable 为数据源进行数据绑定输出word:

      首先是设定一下模板:

      由于是DataTable 为数据源 在此就需要在原来的基础上再添加两个域标签,《TableStart:UserInfo》《TableEnd:UserInfo》分别放在原有域标签的首尾,用于表示中间的那些域标签是出自于名为:UserInfo 的DataTable 中提供数据。

          

      以上是模板。

      下面是代码:

        public void Yu_DataTable()
{
DataTable dt = new DataTable("UserInfo"); dt.Columns.Add("Name"); dt.Columns.Add("Age"); dt.Columns.Add("Sex"); dt.Columns.Add("Birthday"); DataRow dr1 = dt.NewRow(); dr1["Name"] = "张三"; dr1["Age"] = ""; dr1["Sex"] = "男"; dr1["Birthday"] = "1920-01-01"; dt.Rows.Add(dr1); string fielname = Server.MapPath("../UploadFile/file_can_not_del/word_yu.doc"); Document doc = new Document(fielname); //TableStart: UserList - TableEnd:UserList---- - 得在首尾加这俩
doc.MailMerge.ExecuteWithRegions(dt);// doc.Save("D://yu_DataTable.docx");
}

      输出结果:

      

      遇到的问题:

    1. 以DataTable 为数据源的时候,难道必须在同一个截面,也就是一行?这就尴尬了。
    2. 还有就是在生成Word的时候,需要循环输出tr的时候,该怎么做,目前我就是直接生成Cell的。
    3. 有知道的朋友希望不吝赐教!!!
    4. 最后再来一个别的牛人的彩蛋

      

      

      

Aspose.Words 操作指北的更多相关文章

  1. git宝典—应付日常工作使用足够的指北手册

    最近公司gitlab又迁移,一堆git的命令骚操作,然鹅git命令,感觉还是得复习下——其实,git现在界面操作工具蛮多,比如intellij 自带的git操作插件就不错,gitlab github ...

  2. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  3. Python 简单入门指北(一)

    Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...

  4. 可能比文档还详细--VueRouter完全指北

    可能比文档还详细--VueRouter完全指北 前言 关于标题,应该算不上是标题党,因为内容真的很多很长很全面.主要是在官网的基础上又详细总结,举例了很多东西.确保所有新人都能理解!所以实际上很多东西 ...

  5. 关于supervisor的入门指北

    关于supervisor的入门指北 在目前这个时间点(2017/07/25),supervisor还是仅支持python2,所以我们要用版本管理pyenv来隔离环境. pyenv 根据官方文档的讲解, ...

  6. 关于Gevent的使用指北

    关于Gevent的使用指北 只是看了入门指南,和一个翻译文档.写一下个人读书心得. 其实看完之后,第一个反映就是asyncio这个系统库,感觉gevent现在所做的一些事情是与asyncio很像的,但 ...

  7. 颓废选手在 Ubuntu/Noilinux 下的生存指北

    颓废选手在 Ubuntu/Noilinux 下的生存指北 Hint: 这里的 "#" 都是假注释,复制的时候记得删除 一些基本的生存命令 ctrl + alt + t #调出终端 ...

  8. ThinkPHP 3.2.x 集成极光推送指北

    3.2版本已经过了维护生命周期,官方已经不再维护,请及时更新至5.0版本 -- ThinkPHP 官方仓库 以上,如果有条件,请关闭这个页面,然后升级至 ThinkPHP 5,如果由于各种各样的原因无 ...

  9. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

随机推荐

  1. Elasticsearch部署异常Permission denied

    异常描述 在Linux上部署ElasticSearch时抛出了一个异常如下: log4j:ERROR setFile(null,true) call failed. java.io.FileNotFo ...

  2. Spring学习笔记(一) 简介

    版权声明 本文是摘自IBM上Naveen Balani的一篇文章,原文请点击此处:http://www.ibm.com/developerworks/cn/java/wa-spring1/ Sprin ...

  3. [ OS ][ Linux ] [ SA ] root 帳號名稱修改

    1. 背景: 由於 Linux 中預設最高權限的使用者一律為 root, 存在安全性的疑慮. 所以比較安全的作法要將 root 帳號改名為其他名稱,讓要入侵的人需要同時破解出帳號和密碼才可以進入主機, ...

  4. DataReader相关知识点

    C#中提供的DataReader可以从数据库中每次提取一条数据. 1. 获取数据的方式[1]DataReader 为在线操作数据, DataReader会一直占用SqlConnection连接,在其获 ...

  5. Html5必看:教你如何选择移动APP开发框架

    如何选择移动APP开发框架一直是困扰很多新手的难题,今天杭州APP开发小编就和大家一起分享一下HTML5 移动app开发过程中框架该如何选择?当然我们得先从下面几个方面来评估一个框架的优越性,然后再做 ...

  6. win7系统桌面上图标都变成lnk后缀

    1.右键点击空白处,选择“新建”,点击“文本文档”: 2.将文档命名为“1”,后缀名改为inf: 3.双击打开,复制以下内容: [Version] Signature="$Chicago$& ...

  7. mongodb主从搭建

    #tigergao 官网进行下包,可以下载源码包或者二进制包,本次下载的为二进制包,进行试验. 主服务器搭建: mkdir mongomaster cp mongodb-linux-x86_64-rh ...

  8. 命令行导入导出Mysql数据库

    MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录,如我输入的命令行:cd C:\Program Files\MySQL\MySQL Serve ...

  9. OO第二单元总结——电梯调度问题

    一.设计策略. 在三次作业中,多线程程序的实现分以下几个步骤: 1. 主线程Main类的创建多个线程. 2. 共享对象的synchronized锁保证线程之间的互斥访问. 3. 采用notifyAll ...

  10. win10开机时内存使用率达到99%以上

    开始,运行,输入msconfig回车就能看到自启的项目. 搞定! 其实,感觉特别像是输入法的某个监听程序导致内存泄漏,造成的系统问题. 再遇到的时候要认真检查下.