详解 Spire.Doc Mail Merge 功能

让我们想象一下这样的场景:你在一家IT公司上班,某天公司的某一产品大幅度升级了,所以你需要通知所有的客户。这名单实在是太长太长。一个个的通知好麻烦,这得需要多少时间和人力呢?为什么不找个更好的方法来快速高效地完成这项工作呢?我这里给大家一个用组件来解决的方法。组件的链接在这里。https://freeword.codeplex.com

Mail Merge只是Spire.Doc的其中一个非常重要的功能。它还有其他很多简单易用的功能,比如转换word到PDF, Image, HTML 等。

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

详解 Spire.Doc Mail Merge 功能_第1张图片

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

 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 Mail Merge 功能_第2张图片


你可能感兴趣的:(C#,word,mail,merge,邮件合并,.net控件)