Mail Mergeと報告
Mail Mergeは、手紙、ラベル、封筒などの文書をすばやく簡単に作成するための一般的な機能です。 Aspose.Wordsを使用すると、Mail Mergeフィールドを持つテンプレートからドキュメントを生成できます。
Mail Mergeフィールドは、出力ドキュメント内のデータソースレコードの特定の値を含めるためにmail mergeテンプレートに挿入できるフィールドです。 例えば、挿入することができます。融合分野のメールテンプレートの挨拶、受取人の名前ではなく一般"こんにちは!". Aspose.Wordsデータベースやファイルなどの外部ソースからのデータをこれらのフィールドに配置し、書式設定します。 結果の文書は指定されたフォルダに保存されます。
Aspose.Wordsは標準的なMail Merge機能を採用し、多くのステップを進め、レポート、カタログ、在庫、請求書などのさらに複雑なドキュメントを作成できる本格的なレポーティングソリューションに変換します。 Aspose.Wordsレポートソリューションのいくつかの利点は次のとおりです:
- 標準Mail Mergeフィールドを使用したMicrosoft Wordの設計レポート
- 詳細な注文行など、成長しているドキュメント内の領域を定義します
- Mail merge中に画像を挿入する
- カスタムロジックの実行、書式設定の制御、またはMail Mergeイベントハンドラーを使用した複雑なコンテンツの挿入
- 任意の種類のデータソースからのデータをドキュメントに入力します
Mail Merge {#mechanism-and-main-components-of-a-mail-merge-operation}のメカニズムと主な構成要素
Aspose.Wordsは様々なサポートされている形式でドキュメントを読み込む機能を提供し、ユーザーがMail Merge操作を実行できるようにします。
通常、読み込まれたドキュメントでは、差し込み項目、たとえばDOCX形式のドキュメントを格納できます。 ただし、このようなフィールドを格納しない形式、たとえばTXTがあります。 Aspose.Wordsがこのようなファイル形式の読み込みをサポートしている場合は、差し込み項目を文書モデルに直接追加し、便利なサポートされている形式で文書を保存し、Mail Merge操作を実
Mail Merge操作はmail merge templateとdata sourceをマージして個々のmerged documentsを生成します。
Mail Mergeテンプレート {#what-is-a-mail-merge-template}とは何ですか
マージテンプレートを使用してmail merge操作を適用する目的は、ドキュメントを作成するプロセスを簡素化することです。
マージテンプレートを作成および設計するには、いくつかの方法があります。 Microsoft Wordを使用でき、マージテンプレートはMicrosoft Wordテンプレート、つまりDOTまたはDOTX形式の文書である必要はなく、DOCまたはDOCX形式の通常の文書にすることができます。 データソースからのデータを後で挿入する場所に、差し込み項目と呼ばれる特別なフィールドをこのテンプレートに挿入する必要があります。 または、DocumentBuilderクラスを使用してプログラムでマージテンプレートを作成することもできます。
マージテンプレートにはメインテキストが含まれており、Mail Merge操作を実行した後はすべての出力ドキュメントで同じである必要があります。 差し込み項目を追加する機能がある場合は、テンプレートに任意の形式を使用できます。 テンプレート内のすべての差し込み項目は、Mail Merge操作中にデータソースから入力されます。
Mail Merge操作 {#data-source-types-for-a-mail-merge-operation}のデータソース
Aspose.WordsMail Mergeはさまざまなデータソースを受け入れます。 これは、次のいずれかになります。DataTable, DataView, DataSet, IDataReader, ADO.NETでサポートされる値の配列、またはIMailMergeDataSource実装で表されるカスタムデータソース。
データソースには、個々の電子メールやドキュメントをパーソナライズするためにMail Merge操作中に取得されるすべての情報が含まれています。 データソースは、手動で作成することも、既存のデータベースまたはアプリケーションからレポートを作成することによって生成することもできます。 XML形式のデータがある場合は、ロードしてDataSetとマージすることができます。 Mail Merge操作はすべてのデータソースレコードを通過し、ドキュメント内のMail Mergeフィールドに挿入します。 IMailMergeDataSourceRootなどのいくつかのmail mergeインターフェイスを実装して、LINQクエリ、XMLファイル、ビジネスオブジェクトなど、任意のデータソースからのデータをマージできます。IMailMergeDataSourceRootは、LINQクエリ、XMLファイル、またはビジネスオブジェクトを含む任意のデータソースからのデータをマージすることができます。
次のコード例は、Mail Merge操作のデータソースとしてデータテーブルをロードする方法を示しています:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Java | |
private static final String dataDir = Utils.getSharedDataDir(ExecuteMailMergeWithRegions.class) + "MailMerge/"; | |
public static void main(String[] args) throws Exception { | |
Document doc = new Document(dataDir + "MailMerge.ExecuteWithRegions.doc"); | |
int orderId = 10444; | |
// Perform several mail merge operations populating only part of the document each time. | |
// Use DataTable as a data source. | |
// The table name property should be set to match the name of the region defined in the document. | |
DataTable orderTable = getTestOrder(orderId); | |
doc.getMailMerge().executeWithRegions(orderTable); | |
DataTable orderDetailsTable = getTestOrderDetails(orderId, "ExtendedPrice DESC"); | |
doc.getMailMerge().executeWithRegions(orderDetailsTable); | |
doc.save(dataDir + "MailMerge.ExecuteWithRegionsDataTable Out.doc"); | |
} | |
private static DataTable getTestOrder(int orderId) throws Exception { | |
java.sql.ResultSet resultSet = executeDataTable(java.text.MessageFormat.format("SELECT * FROM AsposeWordOrders WHERE OrderId = {0}", Integer.toString(orderId))); | |
return new DataTable(resultSet, "Orders"); | |
} | |
private static DataTable getTestOrderDetails(int orderId, String orderBy) throws Exception { | |
StringBuilder builder = new StringBuilder(); | |
builder.append(java.text.MessageFormat.format("SELECT * FROM AsposeWordOrderDetails WHERE OrderId = {0}", Integer.toString(orderId))); | |
if ((orderBy != null) && (orderBy.length() > 0)) { | |
builder.append(" ORDER BY "); | |
builder.append(orderBy); | |
} | |
java.sql.ResultSet resultSet = executeDataTable(builder.toString()); | |
return new DataTable(resultSet, "OrderDetails"); | |
} | |
/** | |
* Utility function that creates a connection, command, executes the command | |
* and return the result in a DataTable. | |
*/ | |
private static java.sql.ResultSet executeDataTable(String commandText) throws Exception { | |
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); | |
String connString = "jdbc:ucanaccess://" + dataDir + "Northwind.mdb"; | |
// From Wikipedia: The Sun driver has a known issue with character encoding and Microsoft Access databases. | |
// Microsoft Access may use an encoding that is not correctly translated by the driver, leading to the replacement | |
// in strings of, for example, accented characters by question marks. | |
// | |
// In this case I have to set CP1252 for the European characters to come through in the data values. | |
java.util.Properties props = new java.util.Properties(); | |
props.put("charSet", "Cp1252"); | |
// DSN-less DB connection. | |
java.sql.Connection conn = java.sql.DriverManager.getConnection(connString, props); | |
// Create and execute a command. | |
java.sql.Statement statement = conn.createStatement(); | |
return statement.executeQuery(commandText); | |
} |
Mail Merge操作 {#merged-documents-of-a-mail-merge-operation}のマージされたドキュメント
マージされたドキュメントは、テンプレートとデータソースをマージするときのMail Merge操作の結果です。 マージされたドキュメント内のすべての差し込み項目は、データソースからの実際のデータに置き換えられます。
次の画像は、Mail Merge操作を実行する前にマージされたフィールドを持つマージテンプレートの例を示しています。
次の画像は、Mail Merge操作を実行した結果として出力マージされたドキュメントの例を示しています。