word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换
原文出处: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(文字,表格,图片) 占位符替换的更多相关文章
- word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)
1.占位符替换模板导出(只适用于word中含有表格形式的): /// <summary> /// 使用替换模板进行到处word文件 /// </summary> public ...
- C#通过模板导出Word(文字,表格,图片)
C#通过模板导出Word(文字,表格,图片) C#导出Word,Excel的方法有很多,这次因为公司的业务需求,需要导出内容丰富(文字,表格,图片)的报告,以前的方法不好使,所以寻找新的导出方法, ...
- 关于.net导出数据到excel/word【占位符替换】
1]excel的占位符替换 效果如图 关键代码: ///savedFilePath需要保存的路径 templateDocPath模板路径 替换的关键字和值 格式 [姓名]$%$小王 public st ...
- Android提交数据到服务器的两种方式四种方法
本帖最后由 yanghe123 于 2012-6-7 09:58 编辑 Android应用开发中,会经常要提交数据到服务器和从服务器得到数据,本文主要是给出了利用http协议采用HttpClient方 ...
- C# 利用占位符替换word中的字符串和添加图片
利用占位符替换word中的字符串和添加图片 ///<summary> /// 替换word模板文件内容,包括表格中内容 /// 调用如下:WordStr ...
- 创建对象的一种方式&一种继承机制(代码实例)
/* 创建对象的一种方式:混合的构造函数/原型方式, *用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法) */ function People(sname){ this.nam ...
- Linux中设置服务自启动的三种方式
有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统服务 主要用三种方式进行这一操作: ln -s 在/etc/rc.d/rc*.d目录中建立/e ...
- [转]Linux中设置服务自启动的三种方式
from:http://www.cnblogs.com/nerxious/archive/2013/01/18/2866548.html 有时候我们需要Linux系统在开机的时候自动加载某些脚本或系统 ...
- HBase读写的几种方式(三)flink篇
1. HBase连接的方式概况 主要分为: 纯Java API读写HBase的方式: Spark读写HBase的方式: Flink读写HBase的方式: HBase通过Phoenix读写的方式: 第一 ...
随机推荐
- Netty入门(一):零基础“HelloWorld”详细图文步骤
因为接下来的项目要用到netty,所以就了解一下这个程序,奈何网上的教程都是稍微有点基础的,所以,就写一篇对于netty零基础的,顺便也记录一下. 先扔几个参考学习的网页: netty 官方API: ...
- Django数据库,在原有表中添加新字段
1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(这里新增的是dress字段): from django.db import models # Create your mo ...
- C博客作业01--分支,顺序结构
1.本章学习总结 1.1 思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 因为暑假的时候没有事先了解过C语言这门课程,翁恺老师的学习视频没看,pta习题也没有刷,所以开学后学得也蛮吃 ...
- memcached加固
Memcached服务安全加固 更新时间:2017-06-30 10:07:49 漏洞描述 Memcached是一套常用的key-value缓存系统,由于它本身没有权限控制模块,所以对公网开放的 ...
- PrimeNG之Input(一)
Input之AutoComplete --自动完成功能是输入组件,提供实时的建议当打字. Import import {AutoCompleteModule} from 'primeng/primen ...
- JavaScript关于sha1加密
function encodeUTF8(s) { var i, r = [], c, x; for (i = 0; i < s.length; i++) if ((c = s.charCodeA ...
- Caused by: java.lang.ClassNotFoundException: org.springframework.integration.handler.support.HandlerMethodArgumentResolversHolder
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring ...
- oracle储存过程学习笔记
转载至: https://www.2cto.com/database/201610/559389.htm 1.什么是oracle存储过程 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQ ...
- !!在js中的用法
var obj = ""; //undefinedconsole.log(!!obj); //false(强制转换成Boolean类型)
- linux安装软件时提示找不到镜像的问题:Couldn't resolve host 'mirrorlist.centos.org'
问题:[root@cddserver2 ~]# yum -y install gcc-*Loaded plugins: fastestmirror, prestoCould not retrieve ...