Générer des documents MS Word à partir d'un modèle de publipostage en Python

Le publipostage MS Word est une fonctionnalité populaire qui vous permet de créer des lettres, des factures, des enveloppes, des rapports, etc. À l’aide du publipostage, vous pouvez créer un modèle et le remplir avec les données. Par conséquent, un document est généré pour chaque entrée dans la source de données. Pour automatiser cette fonctionnalité, cet article explique comment effectuer un publipostage MS Word à l’aide de Python. Vous apprendrez à créer un modèle de publipostage à partir de rien et à le remplir par programme.

Bibliothèque Python pour automatiser le publipostage MS Word

Pour automatiser le publipostage MS Word, nous utiliserons Aspose.Words for Python. C’est une bibliothèque puissante qui vous permet de créer et de manipuler des documents Word. De plus, il vous permet de créer des modèles de publipostage et de les remplir de manière transparente. Aspose.Words for Python peut être installé à partir de PyPI à l’aide de la commande pip suivante.

pip install aspose-words 

Créer un modèle de publipostage en Python

Un modèle de publipostage contient des champs de fusion remplis avec les valeurs de la source de données. Le modèle peut être au format DOT, DOTX, DOC ou DOCX. Pour créer un modèle de publipostage, vous pouvez utiliser MS Word. Cependant, pour automatiser cette procédure en Python, vous pouvez suivre les étapes ci-dessous.

  • Créez un objet de la classe DocumentBuilder.
  • Insérez du texte à l’aide de la méthode DocumentBuilder.inserttextinput().
  • Insérez le champ de fusion à l’aide de la méthode DocumentBuilder.insertfield().
  • Répétez l’insertion de texte et fusionnez les champs si nécessaire.
  • Enregistrez le modèle en tant que fichier à l’aide de la méthode DocumentBuilder.document.save().

L’exemple de code suivant montre comment créer un modèle de publipostage DOCX à l’aide de Python.

import aspose.words as aw

# Create a document builder
builder = aw.DocumentBuilder()

# Insert a text input field the unique name of this field is "Hello", the other parameters define
# what type of FormField it is, the format of the text, the field result and the maximum text length (0 = no limit)
builder.insert_text_input("TextInput", aw.fields.TextFormFieldType.REGULAR, "", "Hello ", 0)
builder.insert_field("MERGEFIELD CustomerFirstName \\* MERGEFORMAT")

builder.insert_text_input("TextInput1", aw.fields.TextFormFieldType.REGULAR, "", " ", 0)
builder.insert_field("MERGEFIELD CustomerLastName \\* MERGEFORMAT")

builder.insert_text_input("TextInput1", aw.fields.TextFormFieldType.REGULAR, "", " , ", 0)

# Insert a paragraph break into the document
builder.insert_paragraph()

# Insert mail body
builder.insert_text_input("TextInput", aw.fields.TextFormFieldType.REGULAR, "", "Thanks for purchasing our ", 0)
builder.insert_field("MERGEFIELD ProductName \\* MERGEFORMAT")

builder.insert_text_input("TextInput", aw.fields.TextFormFieldType.REGULAR, "", ", please download your Invoice at ", 0)
builder.insert_field("MERGEFIELD InvoiceURL \\* MERGEFORMAT")

builder.insert_text_input("TextInput", aw.fields.TextFormFieldType.REGULAR, "", ". If you have any questions please call ", 0)
builder.insert_field("MERGEFIELD Supportphone \\* MERGEFORMAT")

builder.insert_text_input("TextInput", aw.fields.TextFormFieldType.REGULAR, "", ", or email us at ", 0)
builder.insert_field("MERGEFIELD SupportEmail \\* MERGEFORMAT")

builder.insert_text_input("TextInput", aw.fields.TextFormFieldType.REGULAR, "", ".", 0)

builder.insert_paragraph()

# Insert mail ending
builder.insert_text_input("TextInput", aw.fields.TextFormFieldType.REGULAR, "", "Best regards,", 0)
builder.insert_break(aw.BreakType.LINE_BREAK)
builder.insert_field("MERGEFIELD EmployeeFullname \\* MERGEFORMAT")

builder.insert_text_input("TextInput1", aw.fields.TextFormFieldType.REGULAR, ",", " ", 0)
builder.insert_field("MERGEFIELD EmployeeDepartment \\* MERGEFORMAT")

# Save the template as a DOCX file
builder.document.save("mail_merge_template.docx")

Voici la capture d’écran du modèle que nous venons de créer à l’aide de l’exemple de code ci-dessus.

créer un modèle de publipostage en python

Générer un document Word à l’aide du modèle de publipostage en Python

Maintenant que vous avez créé le modèle de publipostage, il est temps de remplir ses champs avec des valeurs. Voici les étapes pour générer un document Word à partir d’un modèle de publipostage en Python.

  • Chargez le modèle de publipostage à l’aide de la classe Document.
  • Appelez la méthode Document.mailmerge.execute() et transmettez les données sous la forme d’un tableau.
  • Enregistrez le document généré à l’aide de la méthode Document.save().

L’exemple de code suivant montre comment générer un document Word à partir d’un modèle de publipostage.

import aspose.words as aw

# Load the mail merge template
doc = aw.Document("mail_merge_template.docx")

# Fill the fields in the document with data
doc.mail_merge.execute(["CustomerFirstName", "CustomerLastName", "ProductName", "InvoiceURL", "SupportPhone", "SupportEmail", "EmployeeFullname", "EmployeeDepartment"],
    ["John", "Doe", "Aspose.Words", "aspose.com", "111-222-333", "support@aspose.com", "Jimmy", "Sales"]
    )

# Save the document
doc.save("mail_merge_populated.docx")

La capture d’écran suivante montre le document Word que nous avons généré à partir du modèle de publipostage.

générer un document Word à partir d'un modèle de fusion et publipostage en python

Obtenez une licence gratuite

Vous pouvez utiliser Aspose.Words for Python sans limitation d’évaluation en obtenant une licence temporaire gratuite.

Conclusion

Le publipostage MS Word est une fonctionnalité utile pour générer des documents Word à partir de modèles prédéfinis. Pour automatiser le publipostage, cet article a expliqué comment créer des modèles de publipostage et les remplir avec des données en Python. Vous pouvez également explorer d’autres fonctionnalités d’Aspose.Words for Python en utilisant la documentation. Au cas où vous auriez des questions, n’hésitez pas à les poster sur notre forum.

Voir également