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

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

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

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

二:添加项目                                 

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

三:调用方法                      

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

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

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

 List<TagInfo> tagInfos = wordMLHelper.GetAllTagInfo(System.IO.File.OpenRead(templatePath));//打开模板文件,获取所有填充域
for (int i = 0; i < tagInfos.Count; i++)
{
//填充域有两种类型,1:段落或图片,2:表格
//对填充域填充时需先判断填充域类型
if (tagInfos[i].Tbl == null)
{
if (string.Equals(tagInfos[i].TagTips.Trim(), "[NO]"))
{
TxtInfo txtInfo = new TxtInfo();
txtInfo.Content = info.NO;////////NO;--info实体类
txtInfo.ForeColor = "000000";
txtInfo.Size = 32;
txtInfo.HightLight = HighlightColor.None;
txtInfo.underlineStyle = UnderlineStyle.Single;
tagInfos[i].AddContent(txtInfo);
} }
else
{
TableStructureInfo tblInfo = tagInfos[i].Tbl;
if (tagInfos[i].Seq == 2)//整个表格创建
{
for (int j = 0; j < 3; j++)
{
RowStructureInfo row = new RowStructureInfo(); for (int k = 0; k < 3; k++)
{
CellStructureInfo cell = new CellStructureInfo();
TxtInfo txtInfo = new TxtInfo();
txtInfo.Content = "第" + (j + 1) + "行,第" + (k + 1) + "列";
txtInfo.Size = 25;
txtInfo.ForeColor = "0000ff";
cell.AddContentLine(txtInfo);
row.AddCell(cell);
}
tblInfo.AddRow(row);
}
} }
}
if (!string.IsNullOrEmpty(saveFile))
{
templatePath = System.Web.HttpContext.Current.Request.MapPath(tempFile);
wordMLHelper.GenerateWordDocument(System.IO.File.OpenRead(templatePath)
, System.Web.HttpContext.Current.Request.MapPath(saveFile)
, tagInfos); Assistance.RemoveAllTmpFile();// 删除所有临时文件
//Response.Redirect(Request.Url.AbsoluteUri);
}

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

public enum UnderlineStyle
{
Single=0,
Words,
Double,
Thick,
Dotted,
DottedHeavy,
Dash,
DashedHeavy,
DashLong,
DashLongHeavy,
DotDash,
DashDotHeavy,
DotDotDash,
DashDotDotHeavy,
Wave,
WavyHeavy,
WavyDouble,
None,
}

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

   public UnderlineStyle underlineStyle = UnderlineStyle.None;

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

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

  其他内容参照原出处

对word已有表格更新操作:

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

  

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. en-zh(科学技术)science and technology-2

    研究:长期不吃早餐,患心脏病风险增加87% Skipping breakfast could raise risk of heart disease by 87% Skipping breakfast ...

  2. c++第三次实验

    第一题: 先把代码贴上来 main.cpp #include <iostream> #include <cstdlib> #include<conio.h> #in ...

  3. npm run dev没反应

    npm config set registry https://registry.npm.taobao.org npm install npm run dev

  4. Spark入门到精通--(第八节)环境搭建(Hadoop搭建)

    上一节把Centos的集群免密码ssh登陆搭建完成,这一节主要讲一下Hadoop的环境搭建. Hadoop下载安装 下载官网的Hadoop 2.4.1的软件包.http://hadoop.apache ...

  5. 发现了一个比较有意思的url参数

    今天登录阿里云发现需要二次验证了,手机号不是我的很麻烦,然后就看到有个手机app快捷登录的方式,点进去一看,链接地址是这样的http://qd.alibaba.com/onekey.htm?spm=0 ...

  6. Springboot 学习教程(一):版本+ jdk 版本 + Maven 版本的匹配

    Spring boot 版本 Spring Framework jdk 版本 maven 版本 1.2.0 版本之前   6 3.0 1.2.0 4.1.3+ 6 3.2+ 1.2.1 4.1.3+ ...

  7. xgboost 最优参数, df某一个字段进行字符串搜索

    0.909323  with:   {'max_depth': 6, 'min_child_weight': 0.8, 'n_estimators': 800} df_huoguo = df[df.c ...

  8. cacheline基本理论

    一.cacheline 1.cache:解决cpu频率与内存访问之间速度差距越来越大的问题 2.cacheline:cpu cache的最小单位,主流为64B 3.指导:访问数组数据在同一个cache ...

  9. unittest报告出现dict() -> new empty dictionary错误解决办法

    unittest报告出现dict() -> new empty dictionary错误解决办法 说一下原因,这是由于unittest中采用了ddt驱动.  由于版本问题导致 问题如图: 解决办 ...

  10. DS18B20初上电显示85℃问题

    以前用的温度采集都是用的AD,这次改为了DS18B20,看了资料,没有很复杂的部分,重要的就是时序.板子出来后初步测试也能正常读取温度,然而有个问题比较奇怪,就是在板子初上电时读取温度总是显示为+85 ...