• 用Spire.doc来合并邮件


                                   用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 = 0;
     
         //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 = 0; 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;
         }
      }
    }

    输出结果截图:

     

     

     

  • 相关阅读:
    当你进退两难的时候,你想做出决定,抛硬币,当你第一次抛了之后,还想再一次抛的时候,你就知道这个问题的答案了。
    习惯几乎可以绑住一切,只是不能绑住偶然。比如那只偶然尝了鲜血的老虎。
    10个理由让你爱上程序员
    自己不做出点样子,人家想拉你一把都不知你的手在哪里。
    WSL(Windows Subsystem for Linux)笔记一安装与使用
    Nginx(三)-正向代理与反向代理
    Nginx(二)-服务模式运行nginx之WINSW
    Nginx(一)-windows下的安装配置
    WebSocket(一)-RFC6455
    NodeJS笔记(六)-Express HTTP服务器启动后如何关闭
  • 原文地址:https://www.cnblogs.com/Yesi/p/4218254.html
Copyright © 2020-2023  润新知