您的位置:首页 > 编程语言 > ASP

在邮件合并时使用Aspose.Words生成多个文档的具体代码

2013-02-21 08:21 483 查看
使用文档处理控件Aspose.Words进行邮件合并操作一般情况下只会从数据源生成一个文件(例如创建发票或信件)。如果要产生多个文件就需要对邮件进行多次合并。那么问题是该如何将邮件进行多次合并呢?解决该问题需要做到以下几点:

1、循环数据表中的所有行

2、在邮件合并前载入(或复制)原始文档

3、执行邮件合并,保存文件

此过程中,在每个邮件合并前我们可以从一个文件或流中加载模板文件,但通常情况下,更为快速的方法是只加载一次文档,然后在每次邮件合并前从内存中复制。下面来看以下具体的C#代码:

using System;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Reflection;

using Aspose.Words;

namespace MultipleDocsInMailMerge
{
class Program
{
public static void Main(string[] args)
{
//Sample infrastructure.
string exeDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar;
string dataDir = new Uri(new Uri(exeDir), @"../../Data/").LocalPath;

ProduceMultipleDocuments(dataDir, "TestFile.doc");
}

public static void ProduceMultipleDocuments(string dataDir, string srcDoc)
{
// Open the database connection.
string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dataDir + "Customers.mdb";
OleDbConnection conn = new OleDbConnection(connString);
conn.Open();
try
{
// Get data from a database.
OleDbCommand cmd = new OleDbCommand("SELECT * FROM Customers", conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable data = new DataTable();
da.Fill(data);

// Open the template document.
Document doc = new Document(dataDir + srcDoc);

int counter = 1;
// Loop though all records in the data source.
foreach (DataRow row in data.Rows)
{
// Clone the template instead of loading it from disk (for speed).
Document dstDoc = (Document)doc.Clone(true);

// Execute mail merge.
dstDoc.MailMerge.Execute(row);

// Save the document.
dstDoc.Save(string.Format(dataDir + "TestFile Out {0}.doc", counter++));
}
}
finally
{
// Close the database.
conn.Close();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: