美文网首页Python小哥哥WEpython
使用Python制作WORD报告

使用Python制作WORD报告

作者: 我爱学python | 来源:发表于2019-03-17 15:31 被阅读2次

    今天的另一篇文章 “使用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 lxmlpip install docx-mailmerge
    

    WORD合并字段

    为了使docx-mailmerge正常工作,您需要创建标准Word文档,并定义适当的 合并字段 。 以下示例适用于Word 2016.其他版本的Word应该类似。 实际上花了我一段时间来弄清楚这个过程,但是一旦你做了几次,这很简单。

    启动Word并创建基本文档结构。 然后将光标放在应插入 数据的位置,并选择插入 - > 域

    img

    从“字段”对话框中,从“字段名称”列表中选择“MergeField”选项。 在“字段名称”中,输入字段所需的名称。 在这种情况下,我们使用的是商业名称。

    单击确定后,您应该在Word文档中看到类似这样的内容:<< From >>。 您可以继续创建包含所有必填字段的文档。

    img

    简单的合并

    创建Word文档后,填充字段值是一项很简单的操作。

    from mailmerge import MailMerge
    import datetimetemplate = "PracticalPython.docx"
    

    我们的 PracticalPython.docx 文件可以看做是用来给大家群发新年祝福邮件模板。

    img

    下面我们先看看docx文档中有哪些合并字段

    document = MailMerge(template)
    
    print(document.get_merge_fields())
    { From ,  date ,  FromUserName ,  To ,  ToUserName }
    

    我们发现 PracticalPython.docx 文档中有我们上图邮件模板中设计的几个 合并字段,如 From, date, FromUserName, To, ToUserName 。下面我们对这几个变量进行填充。

    document.merge(    From= 123456dadeng@qq.com ,    FromUserName= 大邓 ,    To =  654321guanzhuzhe@qq.com ,    ToUserName= 关注者的昵称 ,    date= {:%d-%b-%Y} .format(datetime.date.today())
    )
    
    #输出的docx文件
    document.write( output.docx )
    

    这是简单的Word文档填充效果

    img

    插入表格

    生成模板时的另一个常见需求是有效地填充值表格中的值。 在我们的示例中,我们可以在包含客户购买历史的信件上附上展览。 在完成模板时,我们不知道要包含多少行,并且 每个字段 的填充将会非常快。 使用merge_rows可以使表格填充更容易。

    在本部分构建模板,请创建一个包含1行的标准Word表,并将字段插入相应的列中。 无需特殊格式。 它应该看起来像这样:

    img

    现在我们定义了一连串的字典,用于填充到表格中去

    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 )
    

    最终结果是每行填充了我们需要的值,并保留了我们在模板文档中定义的默认表格式:

    img

    相关文章

      网友评论

        本文标题:使用Python制作WORD报告

        本文链接:https://www.haomeiwen.com/subject/pgsumqtx.html