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

 

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

一:模板的创建                               

  通过模板导出,肯定需要先创建模板,然后顾名思义就是将模板中提前设置好的占位符,通过程序替换为想输出的内容即可;

  新建word文件(必须为docx或者dotx文件),放在程序根目录下,在需要位置 插入-文档部件-域,

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

二:添加项目                                 

  在解决方案中添加项目WordMLHelper,在原项目中添加对WordMLHelper的引用后可以直接调用.
  WordMLHelper代码地址:http://url.cn/U8VNul

三:调用方法                      

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

        private string mubanFile = "muban.docx";
private string outputPath = @"C:\Users\zz\Desktop\test1.docx";

  1.打开模板文件,获取所有填充域

1 string templatePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory
2 , mubanFile);
3 List<TagInfo> tagInfos = wordMLHelper.GetAllTagInfo(File.OpenRead(templatePath));

  2.遍历所有填充域,替换填充域内容

  锁定填充域的话,有两种方法,一是根据填充域的提示文字,如"[文字]",二是根据填充域的索引,如if(tagInfos[i].Seq==2),则是找到索引为2的填充域

for (int i = 0; i < tagInfos.Count; i++)
{
//填充域有两种类型,1:段落或图片,2:表格
//对填充域填充时需先判断填充域类型
if (tagInfos[i].Tbl == null)
{
if (string.Equals(tagInfos[i].TagTips.Trim(), "[文字]"))
{
TxtInfo txtInfo = new TxtInfo();
txtInfo.Content = "已经成功替换";
txtInfo.ForeColor = "00ff00";
//txtInfo.HightLight = HighlightColor.Blue;
tagInfos[i].AddContent(txtInfo);
}
if (string.Equals(tagInfos[i].TagTips.Trim(), "[图片]"))
{
ImgInfo imgInfo = new ImgInfo();
imgInfo.ImgPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory
, "./image/a1.jpg");
imgInfo.Width = 200;
imgInfo.Height = 200;
tagInfos[i].AddContent(imgInfo);
}
}
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);
}
}

}
}

  3.保存文件

if (!string.IsNullOrEmpty(outputPath))
{
templatePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory
, mubanFile);
wordMLHelper.GenerateWordDocument(File.OpenRead(templatePath)
, outputPath
, tagInfos);

Assistance.RemoveAllTmpFile();// 删除所有临时文件
//Response.Redirect(Request.Url.AbsoluteUri);
}

四:完成                                        

  调用方法很简单,随着模板的修改,可以快速生成需要格式多样内容丰富的Word文档,感谢您的阅读与评论.

 
 
 
标签: Word导出

C#通过模板导出Word(文字,表格,图片)的更多相关文章

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

    原文出处:https://www.cnblogs.com/ilefei/p/3508463.html 一:模板的创建   (注意文件后缀只能是.docx或.doct) 在需要位置 插入-文档部件-域, ...

  2. php导出word(可包含图片)

    为大家介绍一个 php 生成 导出word(可包含图片)的代码,有需要的朋友可以参考下. 之前介绍过php生成word的例子,只是不能包含图片与链接. 今天 为大家介绍一个 php 生成 导出word ...

  3. 使用NPOI2.1.3.1版本导出word附带表格和图片

    原文:http://www.cnblogs.com/afutureBoss/p/4074397.html?utm_source=tuicool&utm_medium=referral 最近项目 ...

  4. 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

    https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...

  5. poi根据模板导出word文档

    POI结构与常用类 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI ...

  6. .net使用AsposeWord导出word table表格

    本文为原创,转载请注明出处 1.前言 .net平台下导出word文件还可以使用Microsoft.Office.Interop和NPOI,但是这两者都有缺点,微软的Office.Interop组件需要 ...

  7. java使用freemarker模板导出word(带有合并单元格)文档

    来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...

  8. C#通过模板导出Word的两种方法(超简单)

    方法一:使用Office的组件 使用该方法必须要安装Office 1.制作Word模板 在需要填充内容的地方增加标识符号,方便之后替换使用,例如 [项目名称],其中[]符号和中间的文字可根据个人情况进 ...

  9. 使用Spire.Doc组件利用模板导出Word文档

    以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作, ...

随机推荐

  1. HDU Today (图论)

    经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬 ...

  2. JavaScript编写了一个计时器

    初学JavaScript,用JavaScript编写了一个计时器. 设计思想: 1.借助于Date()对象,来不断获取时间点: 2.然后用两次时间点的毫秒数相减,算出时间差: 3.累加时间差,这样就能 ...

  3. 利用css新属性appearance优化select下拉框

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  4. CSharp设计模式读书笔记(24):访问者模式(学习难度:★★★★☆,使用频率:★☆☆☆☆)

    模式角色与结构: 示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  5. 【百度地图API】如何快速创建带有标注的地图?——快速创建地图工具+如何标注商家

    原文:[百度地图API]如何快速创建带有标注的地图?--快速创建地图工具+如何标注商家 摘要: 如果你不会程序,如果你不想写代码. 如果你想拥有一张自己的地图,如果你想在该地图上标注出你商店的位置. ...

  6. 传智播客.Net培训就业班入学测试题

    2.对学员的结业考试成绩评测,要求在控制台中提示用户输入学员考试成绩,写一个方法,根据用户输入的成绩,返回一个等级:90分以上A级.80~90分B级.70~80分C级.60~70分B级.60分以下C级 ...

  7. 开发现代ASP.NET应用程序

    新思想.新技术.新架构——更好更快的开发现代ASP.NET应用程序(续1)   今天在@张善友和@田园里的蟋蟀的博客看到微软“.Net社区虚拟大会”dotnetConf2015的信息,感谢他们的真诚付 ...

  8. C#中设计Fluent API

    C#中设计Fluent API 我们经常使用的一些框架例如:EF,Automaper,NHibernate等都提供了非常优秀的Fluent API, 这样的API充分利用了VS的智能提示,而且写出来的 ...

  9. SOD框架的数据容器,打造最适合DDD的ORM框架

    SOD框架的数据容器,打造最适合DDD的ORM框架 引言:DDD的困惑 最近,我看到园子里面有位朋友的一篇博客 <领域驱动设计系列(一):为何要领域驱动设计? >文章中有下面一段话,对DD ...

  10. Hibernat之关系的处理一对一处理

    第一步:编写两个pojo,比如一个学生表一个班级表  这里使用注解. 需要 公司表: package com.qcf.pox; import javax.persistence.CascadeType ...