大家好,欢迎收看思路实验室出品的Python入门教程,我是室长。
在上一期我们了解了如何使用Word的邮件合并功能来批量地生成Word文档。说实话这个过程有点像Python中对字符串添加f前缀来向字符串中插入变量值。不同在于向字符串中插入的变量是由花括号括起来的,而在Word中则是书名号。
在Word中,这种“变量”被称为域。域在Word中可以说是神通广大,不管是页码、目录还是参考文献引用,用上域绝对会让你事半功倍。不过今天我们还是专注于邮件合并中的域。
在邮件合并功能中,每个域起到的都是变量的“占坑位”功能。所以邮件合并的顺序是这样的:
首先,给Word文档挖好坑(放置好域)。
其次,准备好数据表格。
最后,把数据表格中的值对号入座填入坑里,每一行数据就生成一个新的文档。
对于普通的办公族来说,学会这些已经是飞跃式的进步了。但我们不一样,毕竟我们是学了那么久Python的人,懒的程度已经突破天际了。为什么非要把数据整理到表格里再填入Word,为什么还要一步一步跟着邮件合并向导走?完全没必要啊!
今天室长就来教大家用Python来自动化生成Word文档!
首先绕不过去的一步还是给Word文档挖坑,建立文档模板。不过这回我们并不需要使用邮件合并向导,而是直接在文档里插入域。将光标移至想要挖坑的位置,点击插入选项卡→文档部件→域:
选择域类别为邮件合并,域名为MergeField,域属性里的域名由自己来设定,其他选项也根据自己的需求进行设定。
可以看到带有书名号的域名就出现在了文档的相应位置。我们可以点击这个域,发现整个域的背景变成了灰色,证明这是一个整体。还可以拖动光标将域选上,对其格式进行修改,这样的话当域填充了内容时,内容也会是这个格式。
我们再多挖几个:
坑挖好了,我们就可以进入编程的阶段了。使用Python实现邮件合并功能需要安装额外的模块,这方面的模块有几个,这里室长选择的是docx-mailmerge2模块。需要注意安装之后我们要导入的模块名是mailmerge而不是docx-mailmerge2。我们可以直接导入模块中的MailMerge类:
随后创建MailMerge的实例,参数是文档模板的路径。
这样我们的模板就准备好了。接下来我们可以使用merge方法向模板中填入数据,merge方法中的关键字参数就是我们在Word文档中各个域的域名:
当然,最重要的就是把填好内容的文档存储下来,这里需要调用write方法:
赶快打开看看吧:
数据完美地填了进去。
可见,在mailmerge模块的作用下,Python和Word完美地结合在了一起。现在我可以将Python程序中的数据直接传递给Word文档,而不必再倒表格这一道手了。
等下,这还没完。有一种情况会比较棘手,就是向Word中的表格插入数据。如果你只在表格的一行中插入域的话,结果生成的文件就是只有这一行有信息,而其他行都是空白。但是在mailmerge模块下这个问题得到了解决。
我们向模板中添加一个表格,按照之前的方法给各列插入域:
然后我们在merge方法中设定新的关键字参数:
因为表格的行里有“内容”域,所以我们只要在设定关键字参数时设定这个域,程序就能认定我们是在设定这个行。换言之如果设定“地点”域或“时长”域也都是可以的,关键在于参数值的设定。
我们可以看到参数的值是一个列表,而列表里的元素都是字典。这个结构意味着每个字典都代表了一行的数据。字典里的键就是这一行里的域名,值就是要填入域的内容。
我们再打开新的文件看一看:
不多不少,正正好好四行数据。
这一期我们了解了如何使用mailmerge模块去将Python和Word结合到一起,利用Python自动化生成Word文档。虽然例子里的文档非常简单,但配合上Python的各种强大功能,可以满足非常多方面的应用。室长在工作中就编写了一个自动生成实验任务单的程序,布置任务轻松愉快。希望这两期的教程能够帮你提高工作效率,领先别人一大步。如果这篇文章对你有所帮助,希望能帮室长点个赞和在看,你的鼓励是室长进步的动力!