zoukankan      html  css  js  c++  java
  • Python中 将数据插入到Word模板并生成一份Word

    搬运出处: https://blog.csdn.net/DaShu0612/article/details/82912064

    首先,我们需要安装docx-mailmerge这个包。在命令行输入语句,开始安装该包。

    pip install docx-mailmerge

    如果你的系统中已经安装了该包,系统会有如下的提示。

    在完成了docx-mailmerge的安装之后,需要在Word中进行域的设置,这些域就是你的数据填充的位置。

    以Word 2013为例,在Word模板当中,将鼠标光标移动到你细腰插入数据的地方,之后按下图所示进行操作:

    点击域之后,选择 邮件合并,域名选择MergeField,域名可以理解为你在代码中的一个变量,将你要插入的数据赋值给这个变量,你的数据便会插入到模板当中。另外,格式按照自己的要求去选择,默认为无。

     

    这里我简单的编辑了一个证明的模板,在需要插入数据的地方设置完域之后,结果如下图所示:

    在完成前两步工作之后,最后一步就剩下代码的编写工作了。

    在本文中,其实这一部分代码非常简单,本文我写一个简单的Demo,其中我的文件名称和给域赋的值都是写死的,在项目中生成的Word名称和给域赋值都可以是变量,还有,模板的位置,生成文件的位置可以改变,生成文件的名字可以是变量,这样,每次生成的docx文件名字就会不一样,比如在我的项目当中,我就将身份证号作为文件名称,这样按照模板生成的docx文件不会出现重复。

    document_1.write('F:\{}.docx'.format(emp_full_info.get("identity_card")))
    由于Python默认是Unicode编码,所以字符串赋值前要加u,如果是变量赋值,则可以用decode方法,比如:

    Year=year.decode(encoding='UTF-8', errors='strict')
    Demo具体的源码:

    from mailmerge import MailMerge

    # 打印模板
    template = "F:\WorkingProve11.docx"

    # 创建邮件合并文档并查看所有字段

    document_1 = MailMerge(template)
    print("Fields included in {}: {}".format(template,document.get_merge_fields()))
    document_1.merge(
    people_name=u'勒布朗',
    identity_card_id='123456789',
    begin_work_year='2018',
    begin_work_month='7',
    department_name=u'洛杉矶湖人',
    job_name=u'联盟第一人'

    )

    document_1.write('F:\test666.docx')
    最后,在制定的F盘下出现了生成的test666.docx文件,打开之后结果如下图: 

    最后要注意的一点是,如果在同一位置下生成的两份文件名字一样,代码是会报错的。

    解决方法有以下几种:

    1.运行程序之前,将原来的文件删除。

    2.在代码中将文件名称更改。

    3.按照上文我所说的,将文件名称改为变量。

  • 相关阅读:
    JAVA周二学习总结
    2019春总结作业
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    第七周作业
    第六周作业
    第四周课程总结&试验报告(二)
  • 原文地址:https://www.cnblogs.com/lab-zj/p/12095321.html
Copyright © 2011-2022 走看看