C#通过模板导出Word(文字,表格,图片)
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文档,感谢您的阅读与评论.
C#通过模板导出Word(文字,表格,图片)的更多相关文章
- word模板导出的几种方式:第二种:C#通过模板导出Word(文字,表格,图片) 占位符替换
原文出处:https://www.cnblogs.com/ilefei/p/3508463.html 一:模板的创建 (注意文件后缀只能是.docx或.doct) 在需要位置 插入-文档部件-域, ...
- php导出word(可包含图片)
为大家介绍一个 php 生成 导出word(可包含图片)的代码,有需要的朋友可以参考下. 之前介绍过php生成word的例子,只是不能包含图片与链接. 今天 为大家介绍一个 php 生成 导出word ...
- 使用NPOI2.1.3.1版本导出word附带表格和图片
原文:http://www.cnblogs.com/afutureBoss/p/4074397.html?utm_source=tuicool&utm_medium=referral 最近项目 ...
- 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)
https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...
- poi根据模板导出word文档
POI结构与常用类 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人员则可以利用NPOI ...
- .net使用AsposeWord导出word table表格
本文为原创,转载请注明出处 1.前言 .net平台下导出word文件还可以使用Microsoft.Office.Interop和NPOI,但是这两者都有缺点,微软的Office.Interop组件需要 ...
- java使用freemarker模板导出word(带有合并单元格)文档
来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...
- C#通过模板导出Word的两种方法(超简单)
方法一:使用Office的组件 使用该方法必须要安装Office 1.制作Word模板 在需要填充内容的地方增加标识符号,方便之后替换使用,例如 [项目名称],其中[]符号和中间的文字可根据个人情况进 ...
- 使用Spire.Doc组件利用模板导出Word文档
以前一直是用Office的组件实现Word文档导出,但是让客户在服务器安装Office,涉及到版权:而且Office安装,包括权限配置也是比较麻烦. 现在流行使用第三方组件来实现对Office的操作, ...
随机推荐
- 第12章 代理模式(Proxy Pattern)
原文 第12章 代理模式(Proxy Pattern) 代理模式 概述: 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要 ...
- Swiftly语言学习1
单纯值: 1.let常量声明,var声明变量(同时宣布福值,编译器会自己主动判断出类型) var myVariable = 42 myVariable 50 let myConstant = 42 l ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- CSDN Androidclient开展(两):基于如何详细解释Java使用Jsoup爬行动物HTML数据
文章引用鸿扬大大的链接具体介绍怎样使用Jsoup包抓取HTML数据,是一个纯javaproject,并将其打包成jar包.希望了解怎样用java语言爬虫网页的能够看下. 杂家前文就又介绍用HTTP訪问 ...
- 注册 集 与 删除 -- C
文章3位设置和清除操作. #include <stdio.h> #include <stdlib.h> #include <string.h> #define BI ...
- sgu 194 被动散热器具有最大流量的上限和下限(最大流量模板dinic加上优化)
模板类型的题详细參考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 參考博客:http://blog.csdn.ne ...
- linux_后台启动多个java -jar 程序,及关闭
启动脚本 startup.sh #!/bin/bash x=$(($)) )) do java -jar /home/chenpenghui/crawler/crawler-hb/StartUpIp. ...
- SharePoint 2013 搜索SharePoint 特定列和特定文档(自己定义搜索)
SharePoint 2013 搜索SharePoint 特定列和特定文档 1,操作步骤和图例,因语言和版本号的不同 我尽量使用抓图方式. 2. In Central Administration, ...
- Socket 学习(三).2 udp 穿透 服务端 与 客户端 通讯
之前演示的 是 局域网通讯,也可以用作服务器之间的通讯,不能穿透. 想要穿透就要用 udp 了, 后续再讲解 udp 打洞 . 客户端: using System; using System.Wind ...
- asp.net JSON(一)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...