用Spire.doc來合并郵件
讓我們想象一下這樣的場景:你在一家IT公司上班。某天公司的某一産品大幅度更新了。然後你需要通知所有的客戶。這真是很長的名單。一個個的通知他們是有點蠢的,因為這要花費太多的時間和人力了。為什麼不找個更好的方法來快速高效地完成這項工作呢?我這裡給大家一個用元件來解決的方法。元件的連結在
這裡。這是Spire.doc的另一個小功能,就是用它來合并郵件。
這是一個通知郵件并且所發的内容都是相同的。首先我們先建立一個模闆,這個模闆是用來建立通知郵件。請看下面的模闆。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuYzYiNmZ0kjZwADMwUTZ5AjZ0gjZjJ2MxMjYhdTYlNmMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.png)
接下來我們要做的是将方括号内的文本替換成客戶資訊。下面是實作的代碼:
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;
輸出結果截圖: