Serienbriefe sind eine Funktion von Microsoft Word zum schnellen und einfachen Erstellen von Dokumenten wie Briefen, Etiketten und Umschlägen. Aspose.Words Cloud entwickelt den Standard-Serienbrief um viele Schritte weiter und verwandelt ihn in eine vollwertige Berichtslösung, mit der Sie noch komplexere Dokumente wie Berichte, Kataloge, Inventare und Rechnungen erstellen können. Die Vorteile der Aspose.Words Cloud-Berichtslösung sind:
- Entwerfen Sie Berichte in Microsoft Word mithilfe von Standard-Serienbrieffeldern
- Definieren Sie Bereiche im Dokument, die wachsen, wie z. B. Detailzeilen einer Bestellung
- Einfügen von Bildern während des Seriendrucks
- HTML während der Serienbriefbearbeitung einfügen
Grundlegende Schritte
Die Schritte zum Ausführen eines Seriendrucks sind ganz einfach. Zunächst erstellen und gestalten Sie mit Microsoft Word ein Word Dokument, das normalerweise als Vorlage bezeichnet wird. Beachten Sie, dass das Dokument keine Microsoft Word-Vorlage (.dot) sein muss, sondern ein normales .doc Dokument sein kann. Sie fügen einige spezielle Felder, sogenannte Seriendruckfelder, an den Stellen in die Vorlage ein, an denen später Daten aus Ihrer Datenquelle eingefügt werden sollen. Anschließend führen Sie mit der Aspose.Words REST API einen Seriendruckvorgang aus. Der Seriendruckvorgang übernimmt Daten aus Ihrer Datenquelle und fügt sie in das Dokument ein.
Sie können im Dokument auch wiederholbare Seriendruckbereiche festlegen oder spezielle Seriendruckfelder einfügen, die Ihnen das Einfügen anderer Inhalte wie z. B. Bilder ermöglichen. Je nachdem, wie Sie Seriendruckfelder und wiederholbare Bereiche im Dokument einrichten, wird das Dokument so groß, dass es mehrere Datensätze in Ihrer Datenquelle aufnehmen kann. Wenn Sie keine Seriendruckbereiche verwenden, ähnelt der Seriendruck dem Seriendruck in Microsoft Word und der gesamte Dokumentinhalt wird für jeden Datensatz in der Datenquelle wiederholt. Mit wiederholbaren Seriendruckbereichen können Sie Teile in einem Dokument festlegen, die für jeden Datensatz in der Datenquelle wiederholt werden. Wenn Sie beispielsweise eine Tabellenzeile als wiederholbaren Bereich markieren, wird diese Tabellenzeile wiederholt, wodurch die Tabelle dynamisch wächst, um alle Ihre Daten aufzunehmen.
Bereiten Sie ein Dokument vor
Bevor Sie einen Serienbrief ausführen, müssen Sie die Dokumentvorlage vorbereiten. Sie sollten Serienbrieffelder einfügen, die durch Werte aus Ihrer Datenquelle ersetzt werden.
Einfügen von Seriendruckfeldern in ein Dokument
So fügen Sie Seriendruckfelder in ein Dokument ein:
- Öffnen Sie Ihr Dokument in Microsoft Word.
- Klicken Sie im Dokument auf die Stelle, an der Sie ein Seriendruckfeld platzieren möchten.
- Öffnen Sie das Menü „Einfügen“ und wählen Sie „Feld“, um das Dialogfeld „Feld“ zu öffnen.
- Wählen Sie in der Liste „Feldnamen“ MergeField aus.
- Geben Sie im Textfeld Feldname einen Namen für das Seriendruckfeld ein und drücken Sie OK.
Da es sich bei einem Seriendruckfeld um ein normales Microsoft Word-Feld handelt, können Sie in Microsoft Word mit der Tastenkombination Alt+F9 zwischen der Anzeige von Feldfunktionen und Ergebnissen in Ihrem Dokument wechseln. Feldfunktionen werden in geschweiften Klammern angezeigt.
Einfacher Serienbrief
Um Ihre Vorlage für die Durchführung eines einfachen Serienbriefs (ohne Bereiche, ähnlich dem klassischen Serienbrief in Microsoft Word) vorzubereiten, sollten Sie einfach ein oder mehrere Serienbrieffelder an den Stellen einfügen, die mit Daten aus der Datenquelle aufgefüllt werden sollen.
Werfen wir einen Blick auf die Demo „Einladung zum Abendessen“. Sie erstellt einen Brief für eine Liste von Kunden, die in der Datenquelle definiert sind. Die Vorlage enthält eine Reihe von Seriendruckfeldern, die aus zwei Datenquellen ausgefüllt werden. Mit anderen Worten werden zwei Seriendruckvorgänge nacheinander ausgeführt. Zuerst werden Daten aus der ersten Datenquelle in die Vorlage eingefügt. Diese Datenquelle enthält nur eine Zeile, da es sich dabei um Informationen über den Einladenden handelt. Der gesamte Dokumentinhalt wird also nicht wiederholt und nur die entsprechenden Felder werden mit Daten gefüllt. Dann wird der zweite Seriendruckvorgang ausgeführt. Die verwendete Datenquelle enthält Informationen über die Kunden. Die gesamte Vorlage wird für jede Datenzeile wiederholt und jede wiederholte Kopie wird mit den entsprechenden Kundendaten ausgefüllt.
Als Ergebnis haben wir ein Dokument, das aus fünf ausgefüllten, vollständigen und personalisierten Einladungsschreiben besteht (ein Fragment des allerersten ist unten dargestellt):
Wie Sie sehen, ist es möglich und manchmal auch sinnvoll, mehr als einen Zusammenführungsvorgang mit derselben Vorlage durchzuführen, um Daten schrittweise hinzuzufügen. Sie können NEXT-Felder in das Word Dokument einfügen, damit die Seriendruck-Engine den nächsten Datensatz aus der Datenquelle auswählt und mit der Zusammenführung fortfährt. Wenn die Engine auf ein NEXT-Feld stößt, wählt sie einfach den nächsten Datensatz in der Datenquelle aus und setzt die Zusammenführung fort, ohne Inhalte zu kopieren. Dies kann beim Erstellen von Dokumenten wie Adressetiketten verwendet werden.
Der Code zum Ausführen eines einfachen Serienbriefs ist unten angegeben:
// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "DinnerInvitation.docx";
var destFileName = "InviterAdded.docx";
var data = File.ReadAllText(@"c:\Data\" + "Inviter.xml");
string folder = null; // File exists at the root of the storage
// Quelldokument in den Cloud-Speicher hochladen
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);
// Serienbriefvorgang zum ersten Mal ausführen
var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
// Serienbriefvorgang ein zweites Mal ausführen
fileName = destFileName;
destFileName = "FinalDinnerInvitation.docx";
data = File.ReadAllText(@"c:\Data\" + "Clients.xml");
executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
Serienbrief mit Regionen
Wenn Sie Teile des Dokuments dynamisch vergrößern möchten, verwenden Sie Seriendruck mit Bereichen. Um einen Seriendruckbereich im Dokument anzugeben, müssen Sie zwei Seriendruckfelder einfügen, um den Anfang und das Ende des Seriendruckbereichs zu markieren. Der gesamte Dokumentinhalt, der in einen Seriendruckbereich aufgenommen wird, wird automatisch für jeden Datensatz in der Datenquelle wiederholt.
Um den Anfang eines Seriendruckbereichs zu markieren, fügen Sie ein MERGEFIELD mit dem Namen TableStart:MyTable ein, wobei MyTable dem Tag oder Schlüssel in XML bzw. JSON entspricht. Um das Ende des Seriendruckbereichs zu markieren, fügen Sie ein weiteres MERGEFIELD mit dem Namen TableEnd:MyTable ein. Platzieren Sie zwischen diesen Markierungsfeldern Seriendruckfelder, die den Feldern Ihrer Datenquelle entsprechen. Diese Seriendruckfelder werden mit Daten aus der ersten Zeile der Datenquelle gefüllt, dann wird der gesamte Bereich wiederholt und die neuen Felder werden mit Daten aus der zweiten Zeile gefüllt und so weiter.
Befolgen Sie beim Markieren einer Region diese einfachen Regeln:
- Die Felder „TableStart“ und „TableEnd“ müssen sich im selben Abschnitt des Dokuments befinden.
- Bei Verwendung innerhalb einer Tabelle müssen TableStart und TableEnd in der gleichen Zeile der Tabelle stehen.
- Serienbriefbereiche können ineinander verschachtelt werden
- Serienbriefbereiche sollten wohlgeformt sein (es gibt immer ein Paar passender TableStart und TableEnd-Bereiche mit demselben Tabellennamen).
Sehen Sie sich als Beispiel die Demo des Artikelkatalogs an. Hier sehen Sie ein Fragment eines für den Seriendruck vorbereiteten Bereichs:
Beachten Sie, dass die beiden Markierungsfelder TableStart:Item und TableEnd:Item in derselben Zeile der Word-Tabelle platziert sind. Nach der Ausführung des Seriendrucks ist hier das Ergebnis:
Der Code zum Ausführen der Serienbrieffunktion mit Regionen ist unten angegeben:
// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "Invoice_Template.doc";
var destFileName = "Invoice_Template_out_.doc";
var data = File.ReadAllText(@"c:\Data\" + "CustomerData.xml");
string folder = null; // File exists at the root of the storage
// Eingabedokument in den Cloud-Speicher hochladen
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);
var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: true);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
Serienbrief mit der Vorlagensyntax „Mustache“
Mit dieser Syntax können Sie Vorlagen für Serienbriefe erstellen, die anstelle von Seriendruckfeldern einfache Textmarkierungen verwenden. Diese Markierungen sehen folgendermaßen aus: {{ FieldName }}
Object.Attribute-Syntax
Mit der folgenden Syntax können Sie Attribute von Feldern problemlos zusammenführen:
{{ Address.Street }}
Dadurch werden Daten aus XML-Daten zusammengeführt, die wie folgt aussehen:
<Order> // <-- Current context is here.
<Number>23</Number>
<Address>
<Street>Nelson Street</Street>
<Suburb>Howick</Suburb>
<City>Auckland</City>
</Address>
<PhoneNumber>543 1234</PhoneNumber>
</Order>
Foreach-Blöcke
Mit dem Tag foreach können Sie Daten aus mehreren Datensätzen zusammenführen. Dies ist vergleichbar mit Serienbriefbereichen mit herkömmlichen Seriendruckfeldern. Sie können solche Blöcke verschachteln.
{{ #foreach Order }}
{{ Number }}
{{ Address.Street }}
{{ #foreach Item }}
{{ Description }} {{ Cost}} {{ Total }}
{{/foreach Item }}
{{ /foreach Order }}
Sie können diese Felder auch mischen und in andere Microsoft Word-Felder einfügen, beispielsweise in WENN oder Formelfelder.
Bedingter Block
Sie können Serienbriefe mit IF-Anweisungen mithilfe von Aspose.Words Cloud erstellen. Der IF-Block wird nur ausgeführt, wenn der zugehörige Boolesche Ausdruck wahr ist. Die IF-Syntax ist unten dargestellt.
{ IF "{{ GENDER }}" = “MALE” “true text” “false text” }
Der Code zum Ausführen eines Serienbriefs mit der Vorlage „Mustache“ ist unten angegeben:
// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "VendorTemplate.doc";
var destFileName = "VendorTemplate_Out.docx";
string folder = null; // File exists at the root of the storage
var data = File.ReadAllText(@"c:\Data\" + "Vendors.xml");
// Eingabedokument in den Cloud-Speicher hochladen
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(@"c:\Data\" + fileName), null, null);
storageApi.PutCreate(request);
var postExecuteTemplateRequest = new PostExecuteTemplateRequest(fileName, data, folder, destFileName: destFileName);
var actual = wordsApi.PostExecuteTemplate(postExecuteTemplateRequest);
HTML während der Serienbrieffunktion einfügen
Sowohl die APIs executeMailMerge als auch executeTemplate unterstützen das Einfügen von HTML in ein Seriendruckfeld. Sie müssen nur sicherstellen, dass Sie HTML-Zeichen in der Datenquellenzeichenfolge maskieren und das Attribut “format”=“html” verwenden, wie unten gezeigt:
{
"dataSourceList": {
"contractDS": {
"contractDescription": {
"format":"html",
"htmlText": "<b>Test me 1<br><br><i>Test me 2<br><br><u>Test me 2</u></i></b><br>"
}
}
}
}
Der folgende Code zeigt, wie HTML während des Serienbriefs eingefügt wird:
// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet
using System;
using System.IO;
using Aspose.Words.Cloud.Sdk;
using Aspose.Words.Cloud.Sdk.Model;
using Aspose.Words.Cloud.Sdk.Model.Requests;
namespace Aspose.Words.Cloud.Examples.CSharp
{
public class PopulateMailMergeTemplateWithHTMLData
{
public static void Run()
{
WordsApi wordsApi = new WordsApi(Constants.AppKey, Constants.AppSID);
try
{
string fileName = "template.doc";
string destName = "Out_PostDocumentExecuteMailMergeWithHTMLData.docx";
// Originaldokument in den Cloud-Speicher hochladen
wordsApi.UploadFile(new UploadFileRequest(File.Open("..\\..\\..\\Resources\\" + fileName, FileMode.Open), fileName, Constants.MYStorage));
string data = File.ReadAllText("..\\..\\..\\Resources\\TestPostDocumentExecuteMailMerge.txt", System.Text.Encoding.UTF8);
ExecuteMailMergeRequest request = new ExecuteMailMergeRequest(fileName, data, null, Constants.MYStorage, null, null, null, null, null, null, destName);
DocumentResponse result = wordsApi.ExecuteMailMerge(request);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
Bilder während der Serienbrieffunktion einfügen
Sie können auch Bilder in ein Seriendruckfeld einfügen. Der Skalierungsfaktor für Bilder kann mit „%“, „px“ oder „“ (proportionale Skalierung) eingestellt werden. Der Code zum Einfügen von Bildern während des Seriendrucks ist unten angegeben:
// Vollständige Beispiele und Datendateien finden Sie unter https://github.com/aspose-words-cloud/aspose-words-cloud-dotnet
string MyAppKey = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
string MyAppSid = ""; // Get AppKey and AppSID from https://dashboard.aspose.cloud/
WordsApi wordsApi = new WordsApi(MyAppKey, MyAppSid);
StorageApi storageApi = new StorageApi(MyAppKey, MyAppSid);
var fileName = "TestMailMergeWithImages.doc";
var destFileName = "TestMailMergeWithImages_Out.docx";
var data = File.ReadAllText(WordsExamples.PathToDataFiles + @"\DocumentActions\MailMerge\" + "MailMergeData.txt");
string folder = null; // File exists at the root of the storage
// Eingabedokument in den Cloud-Speicher hochladen
PutCreateRequest request = new PutCreateRequest(fileName, File.OpenRead(WordsExamples.PathToDataFiles + @"\DocumentActions\MailMerge\" + fileName), null, null);
storageApi.PutCreate(request);
var executeMailMergeRequest = new PostDocumentExecuteMailMergeRequest(fileName, data, folder, destFileName: destFileName, withRegions: false);
var actual = wordsApi.PostDocumentExecuteMailMerge(executeMailMergeRequest);
Cloud-SDKs
Obwohl der obige Code in .NET vorliegt, sind Aspose.Words Cloud SDKs in fünf verschiedenen Sprachen verfügbar: .NET, Java, Ruby, Python und Node.js. Daher können Sie Mail Merge APIs bequem in jeder dieser Sprachen aufrufen.