天天看點

用Spire.doc來合并郵件

                               用Spire.doc來合并郵件

讓我們想象一下這樣的場景:你在一家IT公司上班。某天公司的某一産品大幅度更新了。然後你需要通知所有的客戶。這真是很長的名單。一個個的通知他們是有點蠢的,因為這要花費太多的時間和人力了。為什麼不找個更好的方法來快速高效地完成這項工作呢?我這裡給大家一個用元件來解決的方法。元件的連結在

這裡

。這是Spire.doc的另一個小功能,就是用它來合并郵件。

這是一個通知郵件并且所發的内容都是相同的。首先我們先建立一個模闆,這個模闆是用來建立通知郵件。請看下面的模闆。

用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;

輸出結果截圖:

用Spire.doc來合并郵件