From 371a740cd06c1d3c12a9912ba95c23f9df930974 Mon Sep 17 00:00:00 2001 From: Yaw Anokwa Date: Wed, 17 Apr 2024 16:23:11 -0700 Subject: [PATCH 1/2] Add mail merge example --- docs/examples/README.md | 4 ++ docs/examples/mail_merge/input.docx | Bin 0 -> 14173 bytes docs/examples/mail_merge/mail_merge.py | 55 ++++++++++++++++++++++ docs/examples/mail_merge/requirements.txt | 2 + 4 files changed, 61 insertions(+) create mode 100644 docs/examples/mail_merge/input.docx create mode 100644 docs/examples/mail_merge/mail_merge.py create mode 100644 docs/examples/mail_merge/requirements.txt diff --git a/docs/examples/README.md b/docs/examples/README.md index 1a972ea..72c38f2 100644 --- a/docs/examples/README.md +++ b/docs/examples/README.md @@ -20,6 +20,10 @@ A Jupyter notebook demonstrating some options for working with repeats. A script that reads names from a CSV and creates an App User for each one that isn't currently used by an active App User on the server. Also creates customized QR codes for each new App User. +## [Mail merge script](mail_merge/mail_merge.py) + +A script that uses mail merge to create personalized Word documents with data from Central. + ## [October 2022 webinar materials](2022-10-pyodk-webinar.ipynb) A Jupyter notebook companion to an October 2022 webinar by Hélène Martin introducing `pyodk`. Includes link to the session recording. \ No newline at end of file diff --git a/docs/examples/mail_merge/input.docx b/docs/examples/mail_merge/input.docx new file mode 100644 index 0000000000000000000000000000000000000000..284ee88e96575b3509791be85a78e66448318e2a GIT binary patch literal 14173 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 Date: Thu, 18 Apr 2024 05:37:56 -0700 Subject: [PATCH 2/2] Address review feedback --- docs/examples/mail_merge/input.docx | Bin 14173 -> 0 bytes docs/examples/mail_merge/mail_merge.py | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 docs/examples/mail_merge/input.docx diff --git a/docs/examples/mail_merge/input.docx b/docs/examples/mail_merge/input.docx deleted file mode 100644 index 284ee88e96575b3509791be85a78e66448318e2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14173 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