

使用Python制作WORD报告
source link: http://mp.weixin.qq.com/s?__biz=MzI1MTE2ODg4MA%3D%3D&%3Bmid=2650072250&%3Bidx=1&%3Bsn=ef2b9614ae42ebaa1fd30da53ca460ca
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

在前面一期文章 使用Pandas、Jinja和WeasyPrint制作pdf报告 中我分享了如何使用HTML模板来创建pdf报告的方法。
虽然pdf很不错,但更多的人实际上在用微软的WORD来操作文档。 实际上对于用户来说,创建所需的模板会更加简单,该模板支持Word中所需的所有自定义格式,而不是尝试使用HTML + CSS。 幸运的是,有一个库支持在python中进行MS Word 邮件合并。 这种方法的优点是可以在任何系统上运行 - 即使没有安装Word。
背景
使所有这一切成为可能的包叫做 docx-mailmerge
。 它是一个成熟的包,可以解析MS Word docx文件,找到 合并字段
并将您需要的任何值填充给它们。 该包还支持一些辅助函数,用于填充表并生成具有多个分页符的单个文件。
我知道标准的Word方法是将此进程称为 mailmerge
,但本文中的这个 “mailmerge”
可以是一个有用的模板系统,可以用于更复杂的解决方案,而不仅仅是填充文档中的 名称和地址
。
安装
docx-mailmerge
需要依赖 lxml
,所以需要先安装lxml,再安装 docx-mailmerge
pip install lxml pip install docx-mailmerge
Word合并字段
为了使docx-mailmerge正常工作,您需要创建标准Word文档,并定义适当的 合并字段
。 以下示例适用于Word 2016.其他版本的Word应该类似。 实际上花了我一段时间来弄清楚这个过程,但是一旦你做了几次,这很简单。
启动Word并创建基本文档结构。 然后将光标放在应插入 数据
的位置,并选择 插入 - > 域
从“字段”对话框中,从“字段名称”列表中选择“MergeField”选项。 在“字段名称”中,输入字段所需的名称。 在这种情况下,我们使用的是商业名称。
单击确定后,您应该在Word文档中看到类似这样的内容: << From >>。 您可以继续创建包含所有必填字段的文档。
简单的合并
创建Word文档后,填充字段值是一项很简单的操作。
from mailmerge import MailMerge import datetime template = "PracticalPython.docx"
我们的 PracticalPython.docx
文件可以看做是用来给大家群发新年祝福邮件模板。
下面我们先看看docx文档中有哪些合并字段
document = MailMerge(template) print(document.get_merge_fields())
{'From', 'date', 'FromUserName', 'To', 'ToUserName'}
我们发现 PracticalPython.docx
文档中有我们上图邮件模板中设计的几个 合并字段
,如 From, date, FromUserName, To, ToUserName
。 下面我们对这几个变量进行填充。
document.merge( From='[email protected]', FromUserName='大邓', To = '[email protected]', ToUserName='关注者的昵称', date='{:%d-%b-%Y}'.format(datetime.date.today()) ) #输出的docx文件 document.write('output.docx')
这是简单的Word文档填充效果
插入表格
生成模板时的另一个常见需求是有效地填充值表格中的值。 在我们的示例中,我们可以在包含客户购买历史的信件上附上展览。 在完成模板时,我们不知道要包含多少行,并且 每个字段
的填充将会非常快。 使用merge_rows可以使表格填充更容易。
在本部分构建模板,请创建一个包含1行的标准Word表,并将字段插入相应的列中。 无需特殊格式。 它应该看起来像这样:
现在我们定义了一连串的字典,用于填充到表格中去
document2 = MailMerge('purchasehistory.docx') sales_history = [{ 'prod_desc': 'Red Shoes', 'price': '$10.00', 'quantity': '2500', 'total_purchases': '$25,000.00'}, { 'prod_desc': 'Green Shirt', 'price': '$20.00', 'quantity': '10000', 'total_purchases': '$200,000.00'}, { 'prod_desc': 'Purple belt', 'price': '$5.00', 'quantity': '5000', 'total_purchases': '$25,000.00'}] document2.merge_rows('prod_desc', sales_history) document2.write('output-table.docx')
最终结果是每行填充了我们需要的值,并保留了我们在模板文档中定义的默认表格式:
近期文章
jupyter notebook代码获取方式,公众号后台回复关键词“ 20200307 ”
Recommend
-
68
During a recent NLP project, I came across an article where word clouds were created in the shape of US Presidents using words from their inauguration speeches...
-
28
B ert-as-a-service is a Python library that enables us to deploy pre-trained BERT models in our local machine and run inference. It can be used to serve any of the released model types and even the models fine-t...
-
9
Word Document to HTML or Markdown with PythonAn Example Use of Python for Beginner.
-
13
使用python包如何以正确的方式制作维恩图 2020年7月8日 |
-
18
如何制作您的FNAC上传报告?-跨境头条-AMZ123亚马逊导航-跨境电商出海门户 如何制作您的FNAC上传报告?...
-
5
我们使用Python可以编写很多提高工作和学习效率的小工具,在编写完之后,如果我们想将其分享给更多的人使用,那么最便捷的方法就是将其打包为可执行程序。 在Windows环境下,我们使用Pyinstaller这个第三方模块可以快速将Python程序打包为EXE格式后缀的...
-
9
21 September 2022 - 字数统计:2238 - 阅读大约需要7分钟 - Hits: 27 使用Python制作可热载的定时调度器 by mayx 定时任务用CRON难道不够吗? 最...
-
7
项目地址:https://github.com/pikeduo/TXTReader PyQt5中文手册:https://maicss.gitbook.io/pyqt-c...
-
4
Oracle 一键巡检自动生成 Word 报告 作者:Lucifer 2024-03-15 14:34:12 巡检人员只需要执行脚本,脚本会自动生成一个完整的 Word 报告(样式格式都无需调整),只需要检查报告中是否存在问题即可。本文演示一套 1...
-
6
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK