对于Word中的邮件合并功能,用户可以将邮件合并后的结果文档保存并打印,也可以通过邮件的形式发送,在很多场合需要使用到此功能。那对于编程人员,我们也可以在C#语言环境中通过代码的形式来实现。根据需要先创建邮件合并模板后,可合并文本和图片,在下面的方法中,需要使用到组件Free Spire.Doc for .NET。创建模板前,需先安装该组件,注意添加引用该组件dll文件到控制台应用程序中,同时添加命名空间。

一、创建邮件合并模板

第一步:添加命名空间

using System;
using Spire.Doc;
using Spire.Doc.Documents;
using System.Drawing;
using Spire.Doc.Fields;

第二步:主要代码段

//创建一个Document类对象,并添加Section
Document document = new Document();
Section section = document.AddSection(); //添加段落到Section,并向段落添加文字,设置文字颜色、字体粗细
Paragraph paragraph = section.AddParagraph();
TextRange tr = paragraph.AppendText("人 物 基 本 信 息");
tr.CharacterFormat.TextColor = Color.YellowGreen;
tr.CharacterFormat.Bold = true; //添加文本,并添加合并域“Image:Portrait”
paragraph.AppendText("\n人 物 肖 像 : ");
paragraph.AppendField("Image:Portrait", FieldType.FieldMergeField); //添加文本,并添加合并域“Name”
paragraph.AppendText("\n姓 名 : ");
paragraph.AppendField("Name", FieldType.FieldMergeField); //添加文本,并添加合并域“Nation”
paragraph.AppendText("\n民 族 :");
paragraph.AppendField("Nation", FieldType.FieldMergeField); //添加文本,并添加合并域“Nationality”
paragraph.AppendText("\n国 籍 : ");
paragraph.AppendField("Nationality", FieldType.FieldMergeField); //添加文本,并添加合并域“Graduated From”
paragraph.AppendText("\n院 校 : ");
paragraph.AppendField("Graduated From", FieldType.FieldMergeField); //保存并打开文档
document.SaveToFile("模板.docx", FileFormat.Docx2013);
System.Diagnostics.Process.Start("模板.docx");

完成以上步骤后,调试运行程序,生成文件(可在项目文件下bin>Debug中查看)

如下图:

二:合并文本、图片

在完成模板创建之后,可添加文本和图片,如下:

第一步:添加命名空间

using System;
using Spire.Doc;
using System.Drawing;
using Spire.Doc.Reporting;

第二步:主要代码段

static void Main(string[] args)
{
//实例化一个Document类,并加载文档模板
Document doc = new Document();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\模板.docx");
var textFieldNames = new string[] { "Name", "Nation", "Nationality", "Graduated From"};
var textFieldValues = new string[] { "乔 治•华 盛 顿 (George Washington)", "美 利 坚 民 族", "美 国", "威 廉 与 玛 丽 学 院 (William and Mary)"};
var imageFieldNames = new string[] { "Portrait" };
var imageFieldValues = new string[] { @"C:\Users\Administrator\Desktop\images\华盛顿.jpg" }; //合并文本到模板
doc.MailMerge.Execute(textFieldNames, textFieldValues); //创建合并图片自定义事件
doc.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MailMerge_MergeImageField); //合并图片到模板
doc.MailMerge.Execute(imageFieldNames, imageFieldValues); //保存并打开文档
doc.SaveToFile("result.docx", FileFormat.Docx);
System.Diagnostics.Process.Start("result.docx");
}
//添加自定义事件载入图片
static void MailMerge_MergeImageField(object sender, MergeImageFieldEventArgs field)
{
string filePath = field.FieldValue as string;
if (!string.IsNullOrEmpty(filePath))
{
field.Image = Image.FromFile(filePath);
}
}

运行程序,生成文件,如下图:

以上全部内容为本文创建邮件合并模板并合并文本和图片的方法讲述,方法中使用到的组件Spire.Doc for .NET在处理Word文档方面具有很好的辅助作用,感兴趣的话可以动手试试。如果本文对你有所帮助,欢迎转载(转载请注明出处)。

C# 创建邮件合并模板并合并文本、图片的更多相关文章

  1. Java 在Word中创建邮件合并模板并合并文本和图片

    Word里面的邮件合并功能是一种可以快速批量操作同类型数据的方式,常见的如数据填充.打印等.其中必不可少的步骤包括用于填充的模板文档.填充的数据源以及实现邮件合并的功能.下面,通过Java程序展示如何 ...

  2. [原创]Devexpress XtraReports 系列 9 创建邮件合并报表

    昨天发表了Devexpress XtraReports系列第八篇[原创]Devexpress XtraReports 系列 8 创建Drill-Through报表,今天我们继续. 今天的主题是创建邮件 ...

  3. 使用jquery合并表格中相同文本的相邻单元格

    一.效果 二.代码 <!DOCTYPE HTML> <html> <head> <title>Example</title> <met ...

  4. 【XDU1144】合并模板

    问题 Fate 有 n 个 ACM/ICPC 比赛的模板,每个都是一个独立的 PDF 文件.为了便于打印,万神希望将这些模板合并成一个 PDF 文件.万神有一个工具,可以将至多 k 个 PDF 文件合 ...

  5. 使用JavaMail创建邮件发送邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  6. JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...

  7. (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封 ...

  8. JavaMail入门第二篇 创建邮件

    JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,所以我们需要使用其子类javax.mail.internet.MimeMessage类来 ...

  9. javaMail创建邮件和发送邮件总结

    (注: 本文是参考http://www.cnblogs.com/xdp-gacl/p/4216311.html. 感谢博主的精彩的描述) 一, 前期的准备 1, 导入 mail.jar 二, 操作步骤 ...

随机推荐

  1. SEED实验——Environment Variable and Set-UID Program实验报告

    任务一:操作环境变量 实验过程一: 用printenv或env打印出环境变量. 在终端输入命令,显示结果如下图所示: 经过实验发现,printenv和env均可输出当前系统的环境变量.不同的是prin ...

  2. JavaScript 异步编程的前世今生(下)

    ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路,马上就有人 ...

  3. 从SQL注入到内网漫游

    前言 在一次渗透实战中,发现了一个注入点,最后成功的漫游了内网. 正文 在渗透中遇到一个站点,顺手测试了一下,在搜索框随便输入了一个字符加个单引号直接报错了,差不多可以确认这里存在注入了.一般这种站安 ...

  4. java前后分离使用fetch上传文件失败500

    这次不是写什么技术要点,仅仅是记录一下 最近遇到的一个问题 背景 使用fetch向java后台上传文件时,前端调试报错500,后端的报错为multipart 无法解析,翻译过来大概是这个意思. 由于本 ...

  5. [Java]LeetCode690. 员工的重要性 | Employee Importance

    You are given a data structure of employee information, which includes the employee's unique id, his ...

  6. Redis 设计与实现 (八)--排序、慢查询日志、监视器

    一.排序 SORT <key>  对一个数字值的key进行排序 1.alpha 对字符串类型的键进行排序 2.asc / desc redis 默认升序排序asc desc 与之相反 3. ...

  7. Java数据结构和算法 - TreeMap源码理解红黑树

    前言 本篇将结合JDK1.6的TreeMap源码,来一起探索红-黑树的奥秘.红黑树是解决二叉搜索树的非平衡问题. 当插入(或者删除)一个新节点时,为了使树保持平衡,必须遵循一定的规则,这个规则就是红- ...

  8. Java IO 导入导出TXT文件

    字节流和字符流 区别: 读写单位:顾名思义,字节流以字节(byte)为读写单位,而字符流以字符为读写单位,根据码表映射字符,一次可能读入多个字符. 处理对象:字节流可以处理所有类型的数据(包括图片等) ...

  9. 浅谈Java内存模型

    Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到.但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着.网上已经有大量的博客,但是人家的终究是人家的,自 ...

  10. spark Could not write all entries

    使用 spark 将 dataFrame 储存到 elasticsearch 出现如下报错: Caused by: org.elasticsearch.hadoop.EsHadoopException ...