Skip to main content

Performs a Mail Merge on docx (Microsoft Office Word) files

Project description

Base on Bouke’s Docx-mailmerge(3q): 1. enable merge_rows all required table, not only the first. 2. fixed the nested table rows merge bug.

Build Status PyPI

Performs a Mail Merge on Office Open XML (docx) files. Can be used on any system without having to install Microsoft Office Word. Supports Python 2.7, 3.3 and up.

Installation

Installation with pip:

$ pip install docx-mailmerge-hxd

Usage

Open the file.

from mailmerge import MailMerge
with MailMerge('input.docx') as document:
    ...

List all merge fields.

print document.get_merge_fields()

Merge fields, supplied as kwargs.

document.merge(field1='docx Mail Merge',
               field2='Can be used for merging docx documents')

Merge table rows. In your template, add a MergeField to the row you would like to designate as template. Supply the name of this MergeField as anchor parameter. The second parameter contains the rows with key-value pairs for the MergeField replacements.

document.merge_rows('col1',
                    [{'col1': 'Row 1, Column 1', 'col2': 'Row 1 Column 1'},
                     {'col1': 'Row 2, Column 1', 'col2': 'Row 2 Column 1'},
                     {'col1': 'Row 3, Column 1', 'col2': 'Row 3 Column 1'}])

Starting in version 0.2.0 you can also combine these two separate calls into a single call to merge.

document.merge(field1='docx Mail Merge',
               col1=[
                   {'col1': 'A'},
                   {'col1': 'B'},
               ])

Starting in version 0.2.0 there’s also the feature for template merging. This creates a copy of the template for each item in the list, does a merge, and separates them by page or section breaks (see function documentation).

When using this feature, make sure you don’t use comments, footnotes, bookmarks, etc. This is because these elements have an id attribute, which must be unique. This library does not handle this, resulting in invalid documents.

document.merge_templates([
    {'field1': "Foo", 'field2: "Copy #1"},
    {'field1': "Bar", 'field2: "Copy #2"},
], separator='page_break')

Write document to file. This should be a new file, as ZipFile cannot modify existing zip files.

document.write('output.docx')

See also the unit tests and this nice write-up Populating MS Word Templates with Python on Practical Business Python for more information and examples.

Todo / Wish List

  • Image merging.

Contributing

  • Fork the repository on GitHub and start hacking

  • Create / fix the unit tests

  • Send a pull request with your changes

Unit tests

In order to make sure that the library performs the way it was designed, unit tests are used. When providing new features, or fixing bugs, there should be a unit test that demonstrates it. Run the test suite:

python -m unittest discover

Credits

This library was written by Bouke Haarsma and contributors.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

docx-mailmerge-hxd-0.5.1.tar.gz (7.8 kB view details)

Uploaded Source

Built Distribution

docx_mailmerge_hxd-0.5.1-py2.py3-none-any.whl (7.7 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file docx-mailmerge-hxd-0.5.1.tar.gz.

File metadata

  • Download URL: docx-mailmerge-hxd-0.5.1.tar.gz
  • Upload date:
  • Size: 7.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.5

File hashes

Hashes for docx-mailmerge-hxd-0.5.1.tar.gz
Algorithm Hash digest
SHA256 2986a10dceab51982cdfd536bb7da922266311a248a777e028308d636a99d270
MD5 8cc6fa6b252656e0ec1be1551c376ab8
BLAKE2b-256 633770399af4be7d5f6218754726e9517cc67dd1d47dcf28430987647252604a

See more details on using hashes here.

File details

Details for the file docx_mailmerge_hxd-0.5.1-py2.py3-none-any.whl.

File metadata

  • Download URL: docx_mailmerge_hxd-0.5.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.48.0 CPython/3.8.5

File hashes

Hashes for docx_mailmerge_hxd-0.5.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 9568be44651e43def5672a2b5fbc4f072d852a0f556104c5425a8ac99e4ed90c
MD5 0c82aebc853c90a08b5283a25a91503e
BLAKE2b-256 79447b53498d5594f349f490004db26ca18f923480072f13812e76623e07bd80

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page