用Spire.doc来合并邮件

让我们想象一下这样的场景:你在一家IT公司上班。某天公司的某一产品大幅度升级了。然后你需要通知所有的客户。这真是很长的名单。一个个的通知他们是有点蠢的,因为这要花费太多的时间和人力了。为什么不找个更好的方法来快速高效地完成这项工作呢?我这里给大家一个用组件来解决的方法。组件的链接在这里。这是Spire.doc的另一个小功能,就是用它来合并邮件。

这是一个通知邮件并且所发的内容都是相同的。首先我们先创建一个模板,这个模板是用来创建通知邮件。请看下面的模板。

接下来我们要做的是将方括号内的文本替换成客户信息。下面是实现的代码:

private int lastIndex = 0;
private void button1_Click(object sender, EventArgs e)
  {
     //create word document
     Document document = new Document();
     document.LoadFromFile("template.doc");
     lastIndex = ;
 
     //informaton of customers
     List<CustomerRecord> customerRecords = new List<CustomerRecord>();
     CustomerRecord c1 = new CustomerRecord();
     c1.ContactName = "Lucy";
     c1.Fax = "786-324-10";
     c1.Date = DateTime.Now;
     customerRecords.Add(c1);
 
     CustomerRecord c2 = new CustomerRecord();
     c2.ContactName = "Lily";
     c2.Fax = "779-138-13";
     c2.Date = DateTime.Now;
     customerRecords.Add(c2);
 
     CustomerRecord c3 = new CustomerRecord();
     c3.ContactName = "James";
     c3.Fax = "363-287-02";
     c3.Date = DateTime.Now;
     customerRecords.Add(c3);
 
     //execute mailmerge
     document.MailMerge.MergeField += newMergeFieldEventHandler(MailMerge_MergeField);
     document.MailMerge.ExecuteGroup(new MailMergeDataTable("Customer", customerRecords));
 
     //save doc file.
      document.SaveToFile("result.doc", FileFormat.Doc);
 
     //viewer the result file.
     System.Diagnostics.Process.Start("result.doc");
  }
 
void MailMerge_MergeField(object sender, MergeFieldEventArgs args)
   {
      //next row
      if (args.RowIndex > lastIndex)
      {
          lastIndex = args.RowIndex;
           AddPageBreakForMergeField(args.CurrentMergeField);
       }
    }
 
void AddPageBreakForMergeField(IMergeField mergeField)
{
     //find position of needing to add page break
     bool foundGroupStart = false;
     Paragraph paramgraph = mergeField.PreviousSibling.Owner as Paragraph;
     MergeField merageField = null;
     while (!foundGroupStart)
     {
         paramgraph = paramgraph.PreviousSibling as Paragraph;
         for (int i = ; i < paramgraph.Items.Count; i++)
         {
            merageField = paramgraph.Items[i] as MergeField;
             if ((merageField != null) && (merageField.Prefix == "GroupStart"))
               {
                 foundGroupStart = true;
                        break;
                }
           }
    }
 
            paramgraph.AppendBreak(BreakType.PageBreak);
        }
 
 
//class to represent customers
public class CustomerRecord
{
   private string m_contactName;
   public string ContactName
     {
        get
        {
          return m_contactName;
         }
        set
        {
           m_contactName = value;
         }
    }
 
private string m_fax;
public string Fax
{
    get
    {
         return m_fax;
     }
     set
     {
        m_fax = value;
       }
}
 
private DateTime m_date;
public DateTime Date
{
    get
    {
       return m_date;
    }
    set
    {
        m_date = value;
     }
  }
}

输出结果截图:

用Spire.doc来合并邮件的更多相关文章

  1. 在C#中使用Spire.doc对word的操作总结

    在C#中使用Spire.doc对word的操作总结 在最近的工程中我们要处理一些word文档.通过在网上的大量搜索,我发现大多数软件功能不是不完整就是有重复.极少数可以完全实现的word组件又要收费. ...

  2. 【产品对比】Word开发工具Aspose.Words和Spire.Doc性能和优劣对比一览

    转:evget.com/article/2018/4/3/27885.html 概述:Microsoft Office Word是微软公司的一个文字处理器应用程序,作为办公软件必不可少的神器之一,Wo ...

  3. Spire.DOC生成表格测试

    首先,很感谢Jack对我的信任,让我来写一个评测,在此对Jack说一声抱歉,由于本人愚钝,并且最近项目比较紧张,把评测这个事情脱了一个月之久,由于往后的日子可能更忙,所以今晚抽空只能只写了一个小程序来 ...

  4. SPIRE.DOC - .NET开发者的福利

    SPIRE.DOC - .NET开发者的福利 前面我们使用过Spire.XLS for .NET Component创建Excel文件.最近试用了下.DOC 方面的API.这次测试的产品是.通过使用S ...

  5. [.NET] 开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc

    开头不讲"Hello Word",读尽诗书也枉然 : Word 操作组件介绍 - Spire.Doc [博主]反骨仔 [原文地址]http://www.cnblogs.com/li ...

  6. 使用Spire.Doc来转换文本

    使用Spire.Doc来转换文本 前段时间,我为不熟悉这个产品的读者们写了一篇关于我对 Spire.Doc的初识印象.Spire.Doc是一个专业的Word .NET库,它是专门为开发人员设计的用来快 ...

  7. Spire.Doc组件读取与写入Word

    之前写了一篇开源组件DocX读写word的文章,当时时间比较匆忙选了这个组件,使用过程中还是有些不便,不能提前定义好模版,插入Form表单域进行替换.最近无意中发现Spire.Doc组件功能很强大,目 ...

  8. Word转图片(使用Spire.doc)

    Spire.Doc for .NET是一款由E-iceblue公司开发的专业的Word .NET类库.支持.net,WPF,Silverlight, 下载地址:http://www.e-iceblue ...

  9. 利用Spire for .NET实现办公自动化——Spire.Doc

    今天研究了一下E-ICEBLUE公司的Spire for .NET系列产品.我们可以通过利用这个系列的dll库文件轻松的实现办公自动化的需求,而且不需要安装相应的办公软件.有关于Spire .NET系 ...

随机推荐

  1. thrift 服务端linux C ++ 与客户端 windows python 环境配置(thrift 自带tutorial为例)

    关于Thrift文档化的确是做的不好.摸索了很久才终于把跨linux与windows跨C++与python语言的配置成功完成.以下是步骤: 1)                 Linux下环境配置 ...

  2. qunit 前端脚本测试用例

    首先引用qunit 测试框架文件 <link rel="stylesheet" href="qunit-1.22.0.css"> <scrip ...

  3. Daily Scrum02 12.16

    鉴于近期数据库大作业提交到了关键时期,大家的时间都十分的紧张,因而,我们决定全团队成员交替作业,不在每日每个成员都分配任务,而只需要每个成员保证每两天一次的工作量,以此方式给大家腾出去完成自己的事情. ...

  4. JeeSite学习笔记~代码生成原理

    1.建立数据模型[单表,一对多表,树状结构表] 用ERMaster建立数据模型,并设定对应表,建立关联关系 2.系统获取对应表原理 1.怎样获取数据库的表 genTableForm.jsp: < ...

  5. linux时间同步ntp服务的安装与配置

    1.首先安装NTP [root@localhost /]# yum install ntp -y 2.修改NTP配置文件,添加NTP服务器的网络位置    /etc/ntp.conf # For mo ...

  6. IE10(去掉文本框的X)

    input[type="text"]::-ms-clear{ display:none;}input[type="text"]::-ms-reveal{ dis ...

  7. 分分钟用上C#中的委托和事件

    每一个初学C#的程序猿,在刚刚碰到委托和事件的概念时,估计都是望而却步,茫然摸不到头脑的.百度一搜,关于概念介绍的文章大把大把的,当然也不乏深入浅出的好文章.可看完这些文章,大多数新手,估计也只是信心 ...

  8. Google分布式构建软件之四:分发构建结果

    注:本文英文原文在google开发者工具组的博客上[需要FQ],以下是我的翻译,欢迎转载,但请尊重作者版权,注名原文地址. 之前的文章,介绍了Google在分布式构建软件过程中,如何把构建过程分发到许 ...

  9. Kinect for Windows SDK开发学习相关资源

    Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...

  10. [Oracle](不会的是三炮)把状态列表作为存储过程参数这件小事

    抱歉用了这么渣的标题,其实是一个很简单而且很常见的需求:假设我们有一个学生表,它有一个状态字段: create table T_STU ( STU_ID ) not null, NAME ), COD ...