• Aspose.Word邮件合并之自定义数据源


    Aspose.Word在进行邮件合并时,默认的几个重载方法对Database支持比较友好,但是也可以通过自定义数据源来实现从集合或者对象中返回数据进行邮件合并。

    自定义数据源主要是通过实现IMailMergeDataSource接口来实现的。官方的例子如下:

    [C#]
    
    public void MailMergeCustomDataSource()
    {
        // Create some data that we will use in the mail merge.
        CustomerList customers = new CustomerList();
        customers.Add(new Customer("Thomas Hardy", "120 Hanover Sq., London"));
        customers.Add(new Customer("Paolo Accorti", "Via Monte Bianco 34, Torino"));
    
        // Open the template document.
        Document doc = new Document(MyDir + "MailMerge.CustomDataSource.doc");
    
        // To be able to mail merge from your own data source, it must be wrapped
        // into an object that implements the IMailMergeDataSource interface.
        CustomerMailMergeDataSource customersDataSource = new CustomerMailMergeDataSource(customers);
    
        // Now you can pass your data source into Aspose.Words.
        doc.MailMerge.Execute(customersDataSource);
    
        doc.Save(MyDir + "MailMerge.CustomDataSource Out.doc");
    }
    
    /// <summary>
    /// An example of a "data entity" class in your application.
    /// </summary>
    public class Customer
    {
        public Customer(string aFullName, string anAddress)
        {
            mFullName = aFullName;
            mAddress = anAddress;
        }
    
        public string FullName
        {
            get { return mFullName; }
            set { mFullName = value; }
        }
    
        public string Address
        {
            get { return mAddress; }
            set { mAddress = value; }
        }
    
        private string mFullName;
        private string mAddress;
    }
    
    /// <summary>
    /// An example of a typed collection that contains your "data" objects.
    /// </summary>
    public class CustomerList : ArrayList
    {
        public new Customer this[int index]
        {
            get { return (Customer)base[index]; }
            set { base[index] = value; }
        }
    }
    
    /// <summary>
    /// A custom mail merge data source that you implement to allow Aspose.Words 
    /// to mail merge data from your Customer objects into Microsoft Word documents.
    /// </summary>
    public class CustomerMailMergeDataSource : IMailMergeDataSource
    {
        public CustomerMailMergeDataSource(CustomerList customers)
        {
            mCustomers = customers;
    
            // When the data source is initialized, it must be positioned before the first record.
            mRecordIndex= -1;
        }
    
        /// <summary>
        /// The name of the data source. Used by Aspose.Words only when executing mail merge with repeatable regions.
        /// </summary>
        public string TableName
        {
            get { return "Customer"; }
        }
    
        /// <summary>
        /// Aspose.Words calls this method to get a value for every data field.
        /// </summary>
        public bool GetValue(string fieldName, out object fieldValue)
        {
            switch (fieldName)
            {
                case "FullName":
                    fieldValue = mCustomers[mRecordIndex].FullName;
                    return true;
                case "Address":
                    fieldValue = mCustomers[mRecordIndex].Address;
                    return true;
                default:
                    // A field with this name was not found, 
                    // return false to the Aspose.Words mail merge engine.
                    fieldValue = null;
                    return false;
            }
        }
    
        /// <summary>
        /// A standard implementation for moving to a next record in a collection.
        /// </summary>
        public bool MoveNext()
        {
            if (!IsEof)
                mRecordIndex++;
    
            return (!IsEof);
        }
    
        public IMailMergeDataSource GetChildDataSource(string tableName)
        {
            return null;
        }
    
        private bool IsEof
        {
            get { return (mRecordIndex >= mCustomers.Count); }
        }
    
        private readonly CustomerList mCustomers;
        private int mRecordIndex;
    }

    参考文档:

    https://apireference.aspose.com/net/words/aspose.words.mailmerging/imailmergedatasource

  • 相关阅读:
    在美国,一名 Uber 司机能赚多少?
    多名Uber司机被指刷单遭封号 一周薪水为0
    腾讯内推【腾讯工作机会内推】【腾讯社招内推】(长期有效)
    优步uber司机怎么注册不了?注册优步司机问题要点
    如何注册成为uber司机 快速成为优步司机网上注册流程攻略 2015最新
    Google AdSense的CPC点击单价超百度联盟(2014)
    非流动资产(财务报表解读)
    资产负债率
    流动资产(财务报表解读)
    UBER人民优步司机注册攻略
  • 原文地址:https://www.cnblogs.com/liszt/p/how-to-custom-data-source-in-aspose-word-for-mail-merge.html
Copyright © 2020-2023  润新知