Mail Merge e rapporti
Mail Merge è una caratteristica popolare per creare rapidamente e facilmente documenti come lettere, etichette e buste. Aspose.Words consente di generare documenti da modelli con campi Mail Merge.
Un campo Mail Merge è un campo che è possibile inserire in un modello mail merge per includere valori specifici da un record di origine dati nei documenti di output. Ad esempio, è possibile inserire un campo di unione in un modello di posta elettronica in modo che il saluto abbia il nome del destinatario anziché un generico " Ciao!". Aspose.Words inserisce i dati di un’origine esterna, ad esempio un database o un file, in questi campi e li formatta. Il documento risultante viene salvato nella cartella specificata.
Aspose.Words adotta la funzionalità standard Mail Merge e avanza di molti passi avanti, trasformandola in una soluzione di reporting completa che consente di creare documenti ancora più complessi come report, cataloghi, inventari e fatture. Ecco alcuni vantaggi della soluzione di reporting Aspose.Words:
- Progettare report in Microsoft Word utilizzando i campi standard Mail Merge
- Definire le aree del documento in crescita, ad esempio righe di ordine dettagliate
- Inserire immagini durante un mail merge
- Esegui qualsiasi logica personalizzata, controlla la formattazione o inserisci contenuto complesso utilizzando i gestori di eventi Mail Merge
- Compilare documenti con dati provenienti da qualsiasi tipo di origine dati
Meccanismo e componenti principali di Mail Merge
Aspose.Words offre la possibilità di caricare documenti in vari formati supportati e quindi consente agli utenti di eseguire un’operazione Mail Merge.
Di solito, un documento caricato consente di memorizzare campi di unione, ad esempio un documento in formato DOCX. Ma ci sono formati che non memorizzano tali campi, ad esempio TXT. Se Aspose.Words supporta il caricamento di tali formati di file, è possibile aggiungere i campi di unione direttamente al modello di documento, salvare il documento in un comodo formato supportato ed eseguire l’operazione Mail Merge.
L’operazione Mail Merge unirà il tuo mail merge template e il tuo data source per generare singoli merged documents.
Che cos’è un modelloMail Merge
L’obiettivo di applicare un’operazione mail merge utilizzando un modello di unione è semplificare il processo di creazione di un documento.
Esistono diversi modi per creare e progettare un modello di unione. È possibile utilizzare Microsoft Word e il modello di unione non deve essere un modello Microsoft Word, ovvero un documento nel formato DOT o DOTX, può essere un documento normale nel formato DOC o DOCX. È necessario inserire alcuni campi speciali chiamati campi di unione in questo modello nei punti in cui si desidera inserire successivamente i dati dall’origine dati. Oppure è possibile creare un modello di unione a livello di codice utilizzando la classe DocumentBuilder.
Il modello di unione contiene il testo principale, che dovrebbe essere lo stesso in tutti i documenti di output dopo aver eseguito l’operazione Mail Merge. È possibile utilizzare qualsiasi formato per il modello se è possibile aggiungere campi di unione ad esso. Tutti i campi di unione all’interno del modello verranno compilati dall’origine dati durante l’operazione Mail Merge.
Origini dati per un’operazione Mail Merge
Aspose.Words Mail Merge accetta varie origini dati. Questo può essere sia un DataTable, DataView, DataSet, IDataReader, array di valori supportati da ADO .NET o origini dati personalizzate rappresentate da implementazioni IMailMergeDataSource.
L’origine dati contiene tutte le informazioni che vengono estratte durante l’operazione Mail Merge al fine di personalizzare singole e-mail e documenti. Le origini dati possono essere create manualmente o generate tramite report da un database o un’applicazione esistente. Se si dispone di dati in formato XML, è possibile caricarli e unirli con DataSet. L’operazione Mail Merge passerà attraverso tutti i record di origine dati e li inserirà nei campi Mail Merge nel documento. È possibile implementare alcune interfacce mail merge, ad esempio IMailMergeDataSourceRoot, per unire i dati da qualsiasi origine dati, tra cui una query LINQ, un file XML o oggetti aziendali.
L’esempio di codice seguente mostra come caricare una tabella di dati come origine dati per l’operazione 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); | |
} |
Documenti uniti di un’operazione Mail Merge
Un documento unito è il risultato dell’operazione Mail Merge quando si unisce il modello all’origine dati. Tutti i campi di unione all’interno del documento unito vengono sostituiti con dati effettivi dall’origine dati.
L’immagine seguente mostra un esempio del modello di unione con campi uniti prima di eseguire l’operazione Mail Merge.
L’immagine seguente mostra un esempio del documento unito di output come risultato dell’esecuzione dell’operazione Mail Merge.