打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Python自动化Word,使用Python-docx和pywin32
excelperfect

标签:python,pandas,python-docx,pywin32

本文介绍如何使用python-docx自动化Word文档,以及如何使用win32com库发送电子邮件。假设有一个存储在Excel文件(或数据库)中的客户信息列表,处理过程如下所示:

1.为每个客户端自动生成MS Word发票

2.将Word文档转换为PDF格式

3.使用MS Outlook App向客户发送带有自定义问候语的PDF发票

所需要的库

这个项目需要三个库。使用pandas从Excel文件中读取数据,但如果数据在其他地方,或者希望以其他方式提取客户数据,则pandas库不是必需的。

python-docx用于自动化.docx(例如MS Word,Googledocs)文件。

pywin32用于与WindowsAPIs相交互。

使用python-docx自动化Word文档

如果你还没有安装这个库,在命令行中输入:

pip installpython-docx

安装这个库。

因为docx库可创建.docx文件,所以不必使用MSWord。要创建一个docx文件,需要先创建一个Document对象,然后在document对象内部,可以添加各种元素,如标题、段落、图片等。在下面的代码中,Inches对象用于定义图片等元素的大小。

Run对象表示任何文本,可以是字母、单词、句子或完整的段落。使用.add_paragraph()开始一个新的句子/段落“完美Excel”,然后可以继续向现有Paragraph对象添加新的Runs。

一旦添加了Run,就可以修改其字体、大小、颜色等属性。

下面的代码创建句子“完美Excel是专注数据分析的微信公众号”并设置格式。

创建发票

在Excel中的示例数据如下图所示。

注,上图数据只是示例,使用我自己的测试电子邮件地址。

现在,让我们为每个客户创建一张发票。

由于这是一个流线型流程的一部分,我们将编写一个一次只做一件事的函数。第一步是以.docx格式创建发票。这个函数接受以下参数:客户名称、电子邮件、销售给他们的产品、数量和单价。

该函数的代码如下:

使用下面语句测试这个函数:

make_client_invoice('客户1','xhdsxfjy@163.com', '产品1', 10, 11000)

结果如下图所示。

注:从图上可以看出,这几个库支持中文不是太友好!

转换MS Word文档为PDF格式

有了发票的Word文档之后,让我们将其转换为PDF,因为这是商务文档的标准格式。

我们将使用pywin32/win32com库,这个库的安装名和库名不同。注意以下差异:

安装这个库,使用:

pip installpywin32

导入这个库,使用:

import win32com.client

win32com是一个很棒的库,允许我们在Windows操作系统中控制很多东西。例如,它可以控制Office应用套件。

要将Word(.docx)转换成PDF格式,实际上是使用win32com打开文档,然后将其另存为PDF格式。很简单!

下面的代码接受输入文件路径src,然后将pdf转换并保存到文件路径dst。

win32com.client.Dispath('Word.Application')将在Python中创建一个MSWord实例/对象。将Word替换为Excel,将拥有一个Excel实例!

wdFormatPDF=17可能是VBA使用的约定。可以在下面的链接中检查可以保存的其他文件类型选项的列表:https://docs.microsoft.com/en-us/office/vba/api/word.wdsaveformat。

使用Outlook App自动发送电子邮件

接下来,我们将把发票发给我们的客户。win32com再次成为我们与OutlookApp交互的助手。注意,不是基于web的Outlook,而是安装在我们计算机上的实际应用程序。此步骤要求在计算机上安装Office(尤其是Outlook),并登录Outlook帐户。只要你的Outlook应用程序保持登录状态,就不需要用户名和密码。

在上面的代码中,第3行CreateItem(0)表示创建Mail对象。有关可以在Outlook中创建的其他可能对象,参见下表。

要添加附件,只需传入类似于代码第7行的文件位置。

似乎甚至不需要打开Outlook应用程序就可以使用Python发送电子邮件。只要我们以前登录过Outlook应用程序,就可以继续了。最好的部分是,不需要凭据或密码,win32com只需使用现有设置与Outlook交互即可。

完整的代码

现在,已经为发票系统的三个步骤提供三个函数。把它们组合起来了,可以使用循环逐个发送发票,或使用其他流程生成发票。

from docx import Document

from docx.shared import Inches

import pandas as pd

import win32com.client

def make_client_invoice(name, email, product, unit, price):

    document = Document()

    document.add_picture(r'D:\完美Excel\python.png', width=Inches(1))

    document.add_heading('发票', 0)

    p1 = document.add_paragraph('尊敬的 ')

    p1.add_run(name).bold = True

    p1.add_run(':')

    p2 = document.add_paragraph('请获取后附的你最近购买产品的发票,你购买')

    p2.add_run(product).bold = True

    p2.add_run('共计')

    p2.add_run(str(unit)).bold = True

    p2.add_run('个。')

    [document.add_paragraph('') for __ inrange(2)]

    table = document.add_table(rows=1, cols=4)

    hdr_cells = table.rows[0].cells

    hdr_cells[0].text = '产品名称'

    hdr_cells[1].text = '数量'

    hdr_cells[2].text = '单价'

    hdr_cells[3].text = '总价'

    for i in range(4):

       hdr_cells[i].paragraphs[0].runs[0].font.bold = True

    row_cells = table.add_row().cells

    row_cells[0].text = product

    row_cells[1].text = f'{unit:,.2f}'

    row_cells[2].text = f'{price:,.2f}'

    row_cells[3].text = f'{unit * price:,.2f}'

    [document.add_paragraph('') for __ inrange(10)]

    document.add_paragraph('合作愉快,欢迎再次光临!')

    document.add_paragraph('此致')

    document.add_paragraph('敬礼!')

    document.save(f'{name}.docx')

def docx_to_pdf(src, dst):

    word =win32com.client.Dispatch('Word.Application')

    wdFormatPDF = 17

    doc = word.Documents.Open(src)

    doc.SaveAs(dst, FileFormat=wdFormatPDF)

    doc.Close()

    word.Quit()

def send_email(name, to_addr, attachment):

    outlook =win32com.client.Dispatch('Outlook.Application')

    mail = outlook.CreateItem(0)

    mail.To = to_addr

    mail.Subject = '发票'

    mail.Body = f'尊敬的{name}, 请查找附件发票'

    mail.Attachments.Add(attachment)

    mail.Send()

注:本文学习整理自pythoninoffice.com,稍有调整修改。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python|读取word文档表格内容
Python:读取 .doc、.docx 两种 Word 文件简述及“Word 未能引发事件”错误
Python办公自动化全攻略!从入门到精通,只需这几步!
【Python小技巧】多个Word文档合并?Python帮你搞定!
Python自动化办公系列之Python操作Word
生活中的python-利用python-docx自动生成表格简化工作流程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服