原文出处:https://www.cnblogs.com/ilefei/p/3508463.html

一:模板的创建   (注意文件后缀只能是.docx或.doct)

在需要位置 插入-文档部件-域,

  域名:MacroButton
  宏名:DoFieldClick
  显示文字:这个自己设置,为了与模板其他文字区分,可以用"[]"括起来.
  需要多少替换内容,添加多少域即可.

二:添加项目                                 

  在解决方案中添加项目WordMLHelper,在原项目中添加对WordMLHelper的引用后可以直接调用.(见头部出处)

三:调用方法                      

  首先确定模板文件位置和导出文件的生成路径.

  1. private string mubanFile = "muban.docx";
  2. private string outputPath = @"test1.docx";
  1. string templatePath = System.Web.HttpContext.Current.Request.MapPath(mubanFile );

  //mvc读取文件路径跟原文出处不一样

  1. List<TagInfo> tagInfos = wordMLHelper.GetAllTagInfo(System.IO.File.OpenRead(templatePath));//打开模板文件,获取所有填充域
  2. for (int i = 0; i < tagInfos.Count; i++)
  3. {
  4. //填充域有两种类型,1:段落或图片,2:表格
  5. //对填充域填充时需先判断填充域类型
  6. if (tagInfos[i].Tbl == null)
  7. {
  8. if (string.Equals(tagInfos[i].TagTips.Trim(), "[NO]"))
  9. {
  10. TxtInfo txtInfo = new TxtInfo();
  11. txtInfo.Content = info.NO;////////NO;--info实体类
  12. txtInfo.ForeColor = "000000";
  13. txtInfo.Size = 32;
  14. txtInfo.HightLight = HighlightColor.None;
  15. txtInfo.underlineStyle = UnderlineStyle.Single;
  16. tagInfos[i].AddContent(txtInfo);
  17. }
  18.  
  19. }
  20. else
  21. {
  22. TableStructureInfo tblInfo = tagInfos[i].Tbl;
  23. if (tagInfos[i].Seq == 2)//整个表格创建
  24. {
  25. for (int j = 0; j < 3; j++)
  26. {
  27. RowStructureInfo row = new RowStructureInfo();
  28.  
  29. for (int k = 0; k < 3; k++)
  30. {
  31. CellStructureInfo cell = new CellStructureInfo();
  32. TxtInfo txtInfo = new TxtInfo();
  33. txtInfo.Content = "第" + (j + 1) + "行,第" + (k + 1) + "列";
  34. txtInfo.Size = 25;
  35. txtInfo.ForeColor = "0000ff";
  36. cell.AddContentLine(txtInfo);
  37. row.AddCell(cell);
  38. }
  39. tblInfo.AddRow(row);
  40. }
  41. }
  42.  
  43. }
  44. }
  45. if (!string.IsNullOrEmpty(saveFile))
  46. {
  47. templatePath = System.Web.HttpContext.Current.Request.MapPath(tempFile);
  48. wordMLHelper.GenerateWordDocument(System.IO.File.OpenRead(templatePath)
  49. , System.Web.HttpContext.Current.Request.MapPath(saveFile)
  50. , tagInfos);
  51.  
  52. Assistance.RemoveAllTmpFile();// 删除所有临时文件
  53. //Response.Redirect(Request.Url.AbsoluteUri);
  54. }

  四、导出结果文档如果原来有下滑线,则在引用的项目中添加枚举类(在HighlightColor枚举下添加)

  1. public enum UnderlineStyle
  2. {
  3. Single=0,
  4. Words,
  5. Double,
  6. Thick,
  7. Dotted,
  8. DottedHeavy,
  9. Dash,
  10. DashedHeavy,
  11. DashLong,
  12. DashLongHeavy,
  13. DotDash,
  14. DashDotHeavy,
  15. DotDotDash,
  16. DashDotDotHeavy,
  17. Wave,
  18. WavyHeavy,
  19. WavyDouble,
  20. None,
  21. }

  添加下滑线枚举变量(在TxtInfo类中)

  1. public UnderlineStyle underlineStyle = UnderlineStyle.None;

  在WordMLHelper类中的AssembleTxtRun方法中添加判断:

  1. if (txtInfo.underlineStyle!=UnderlineStyle.None)
  2. {
  3. Underline underline = new Underline();
  4. underline.Val = (UnderlineValues)((int)txtInfo.underlineStyle);
  5. rPr.AppendChild(underline);
  6. }
  7. txtRun.AppendChild(rPr);//在上面插入下滑线的判断

  其他内容参照原出处

对word已有表格更新操作:

  1. if (tagInfos[i].Seq == 0)
  2. {
  3. TxtInfo txtInfo;
  4. var cell2 = tblInfo.Rows[2].Cells[1];//通过表格索引修改,word文档不需要操作,注意:word中不能含相同名称否则会报索引大小错误
      ,同名可通过修改word中的同名文字然后用代码替换回来
  5. txtInfo = new TxtInfo();
  6. txtInfo.Content = newRow["RecordType1"].ToString();////////
  7. cell121.AddContentLine(new TxtInfo() { Content = "" });
  8. cell121.AddContentLine(new TxtInfo() { Content = "☑ A", Size = 24 });
  9. cell121.AddContentLine(new TxtInfo() { Content = "☐ B", Size = 24 });
  10. cell121.AddContentLine(new TxtInfo() { Content = "☐ C", Size = 24 });
  11.  
  12. }
  13.  
  14. }

  

word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换的更多相关文章

  1. word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)

    1.占位符替换模板导出(只适用于word中含有表格形式的): /// <summary> /// 使用替换模板进行到处word文件 /// </summary> public ...

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

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

  3. 关于.net导出数据到excel/word【占位符替换】

    1]excel的占位符替换 效果如图 关键代码: ///savedFilePath需要保存的路径 templateDocPath模板路径 替换的关键字和值 格式 [姓名]$%$小王 public st ...

  4. Android提交数据到服务器的两种方式四种方法

    本帖最后由 yanghe123 于 2012-6-7 09:58 编辑 Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方 ...

  5. C# 利用占位符替换word中的字符串和添加图片

    利用占位符替换word中的字符串和添加图片   ///<summary>         /// 替换word模板文件内容,包括表格中内容         /// 调用如下:WordStr ...

  6. 创建对象的一种方式&一种继承机制(代码实例)

    /* 创建对象的一种方式:混合的构造函数/原型方式, *用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法) */ function People(sname){ this.nam ...

  7. Linux中设置服务自启动的三种方式

    有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s                       在/etc/rc.d/rc*.d目录中建立/e ...

  8. [转]Linux中设置服务自启动的三种方式

    from:http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统 ...

  9. HBase读写的几种方式(三)flink篇

    1. HBase连接的方式概况 主要分为: 纯Java API读写HBase的方式: Spark读写HBase的方式: Flink读写HBase的方式: HBase通过Phoenix读写的方式: 第一 ...

随机推荐

  1. Netty入门(一):零基础“HelloWorld”详细图文步骤

    因为接下来的项目要用到netty,所以就了解一下这个程序,奈何网上的教程都是稍微有点基础的,所以,就写一篇对于netty零基础的,顺便也记录一下. 先扔几个参考学习的网页: netty 官方API:  ...

  2. Django数据库,在原有表中添加新字段

    1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(这里新增的是dress字段): from django.db import models # Create your mo ...

  3. C博客作业01--分支,顺序结构

    1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 因为暑假的时候没有事先了解过C语言这门课程,翁恺老师的学习视频没看,pta习题也没有刷,所以开学后学得也蛮吃 ...

  4. memcached加固

    Memcached服务安全加固 更新时间:2017-06-30 10:07:49    漏洞描述 Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的 ...

  5. PrimeNG之Input(一)

    Input之AutoComplete --自动完成功能是输入组件,提供实时的建议当打字. Import import {AutoCompleteModule} from 'primeng/primen ...

  6. JavaScript关于sha1加密

    function encodeUTF8(s) { var i, r = [], c, x; for (i = 0; i < s.length; i++) if ((c = s.charCodeA ...

  7. Caused by: java.lang.ClassNotFoundException: org.springframework.integration.handler.support.HandlerMethodArgumentResolversHolder

    <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring ...

  8. oracle储存过程学习笔记

    转载至: https://www.2cto.com/database/201610/559389.htm 1.什么是oracle存储过程 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQ ...

  9. !!在js中的用法

    var obj = ""; //undefinedconsole.log(!!obj);  //false(强制转换成Boolean类型)

  10. linux安装软件时提示找不到镜像的问题:Couldn't resolve host 'mirrorlist.centos.org'

    问题:[root@cddserver2 ~]# yum -y install gcc-*Loaded plugins: fastestmirror, prestoCould not retrieve ...