前言:  

这段时间因为业务需求,需要做一个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. ubuntu中不能远程连接解决

    今天装好ubuntu19.04之后不能远程连接,网上找了很久终于自己解决了.ap 步骤如下:希望对各位有用,哪里不对请指出 第一步我们需要加载openssh-server   等待加载完毕后,     ...

  2. windows上上传代码到Github

    Repository name: 仓库名称 Description(可选): 仓库描述介绍 Public, Private : 仓库权限(公开共享,私有或指定合作者) Initialize this ...

  3. WebView简单用法

    1.空布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:andr ...

  4. Android 数字四舍五入

    BigDecimal b = new BigDecimal(hour).setScale(1, BigDecimal.ROUND_HALF_UP); setScale(int newScale, in ...

  5. c#将http调用返回额json中的有关中文的unicode转换为中文

    c#将http调用返回额json中的有关中文的unicode转换为中文 中文转Unicode:HttpUtility.UrlEncodeUnicode(string str);转换后中文格式:&quo ...

  6. Mac-O文件加载的全过程(一)

    在Mac的开发中, 有没有想过当我们点击可执行文件之后,Mac究竟做了什么事情才让我们的程序运行起来? 对于应用层开发人员或者普通的用户而言, 其实无需知道的这么详细:但是对于内核开发人员而言, 如果 ...

  7. iproute2+tc notes

    iproute2+tc notes The iproute2+tc package allows access to the variety of neat new networking featur ...

  8. why updating the Real DOM is slow, what is Virtaul DOM, and how updating Virtual DOM increase the performance?

    个人翻译: Updating a DOM is not slow, it is just like updating any JavaScript object; then what exactly ...

  9. linux之资料重定向

    標準輸入 (stdin) :代碼為 0 ,使用 < 或 << : 標準輸出 (stdout):代碼為 1 ,使用 > 或 >> : 標準錯誤輸出(stderr):代 ...

  10. Python基本类型操作

    # str = "2017.1.1.wmv" # #print(str[str.rfind('.'):]) # #print(str.count(".")) # ...