原創|其它|編輯:郝浩|2012-11-28 15:36:14.000|閱讀 1863 次
概述:使用Aspose.Words進行郵件合并操作一般情況下只會從數據源生成一個文件(例如創建發票或信件)。本文將詳述如何使用Aspose.Werds在郵件合并時生成多個文檔。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
使用Aspose.Words進行郵件合并操作一般情況下只會從數據源生成一個文件(例如創建發票或信件)。
產生多個文檔需要進行多次郵件合并。如果需要將數據源中的所有數據都存在于一個單獨的文件中,需要做到以下幾點:
你可以在每個郵件合并前從一個文件或流中加載模板文件,但通常情況下,更為快速的方法是只加載一次文檔,然后在每次郵件合并前從內存中復制。
要注意的是,執行郵件合并你應該有一個適當的模板文件。這個模板可以是一個Microsoft Word模板或一個普通的Microsoft Word文檔,但它需要在插入數據的地方包含MERGEFIELD字段。每個字段的名稱應和數據源中相應的字段相同。
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(); } } } } VB
Imports Microsoft.VisualBasic Imports System Imports System.Data Imports System.Data.OleDb Imports System.IO Imports System.Reflection Imports Aspose.Words Namespace MultipleDocsInMailMerge Friend Class Program Public Shared Sub Main(ByVal args() As String) 'Sample infrastructure. Dim exeDir As String = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar Dim dataDir As String = New Uri(New Uri(exeDir), "../../Data/").LocalPath ProduceMultipleDocuments(dataDir, "TestFile.doc") End Sub Public Shared Sub ProduceMultipleDocuments(ByVal dataDir As String, ByVal srcDoc As String) ' Open the database connection. Dim connString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dataDir & "Customers.mdb" Dim conn As New OleDbConnection(connString) conn.Open() Try ' Get data from a database. Dim cmd As New OleDbCommand("SELECT * FROM Customers", conn) Dim da As New OleDbDataAdapter(cmd) Dim data As New DataTable() da.Fill(data) ' Open the template document. Dim doc As New Document(dataDir & srcDoc) Dim counter As Integer = 1 ' Loop though all records in the data source. For Each row As DataRow In data.Rows ' Clone the template instead of loading it from disk (for speed). Dim dstDoc As Document = CType(doc.Clone(True), Document) ' Execute mail merge. dstDoc.MailMerge.Execute(row) ' Save the document. dstDoc.Save(String.Format(dataDir & "TestFile Out {0}.doc", counter)) counter += 1 Next row Finally ' Close the database. conn.Close() End Try End Sub End Class End Namespace
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網