>  기사  >  백엔드 개발  >  Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例

Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例

Go语言进阶学习
Go语言进阶学习앞으로
2023-07-24 17:48:401289검색

이제 Word 초대장 템플릿이 있고 고객 이름, 연락처 정보, 이메일 주소 등과 같은 기본 정보가 포함된 고객 목록이 있는데 이제 상사가 초대장 템플릿의 이름을 바꿔야 한다고 상상해 보세요. , Word 초대장 템플릿을 PDF 형식으로 생성한 다음 통합 초대 언어(이메일 본문)를 편집한 다음 초대장 첨부 파일을 고객의 이메일에 순차적으로 보냅니다. Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例일반적인 상황에서는 Excel 표에 고객 이름을 복사하여 붙여넣은 다음 Word 문서에서 하나씩 바꾸고 Word를 PDF 형식으로 변환한 다음 Excel 표에 이메일 주소를 복사하여 보내야 합니다. 이메일을 수정한 후 편지에 첨부 파일을 첨부하고 보내기를 클릭한 후 계산을 하면 프로세스가 빠르면 열정이 높으면 약 1분 이상 소요됩니다. 고객이 수십 명이면 괜찮고, 한 시간 안에 끝낼 수 있지만, 고객이 수백, 수천, 심지어 수만 명이라면 어떨까요? 아마 사무실에서 울다가 기절할 것 같아요.

Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例

하지만 당황하지 마세요. Python은 일련의 콤보로 사무실을 자동화하고 Python을 사용하여 사무실을 자동화합니다. - Word 문서 대체, Excel 표 읽기, PDF 파일 생성 및 이메일 자동 이메일 전송 원스톱 서비스 배열을 이용하세요. 함께 보세요 보세요!

구현 과정

1) Word 템플릿을 교체하여 해당 초대장 생성

여기에서는 위의 Word 템플릿을 사례로 삼아 템플릿의 8a11bc632ea32a57b3e3693c7987c420를 대체하는 함수를 작성합니다. 고객의 이름으로 한 번에.

def get_invitation(name):
    doc = docx.Document("template.docx")
    for para in doc.paragraphs:
        if &#39;<name>&#39; in para.text:
            for run in para.runs:
                if &#39;<name>&#39; in run.text:
                    run.text = run.text.replace(&#39;<name>&#39;, name)
        doc.save(f&#39;./邀请函/{name}.docx&#39;)

위 코드는 Word 문서의 구조를 이해해야 합니다. 문서에는 doc.paragraphs를 사용하여 얻은 여러 단락이 있습니다. 단락의 텍스트는 para.text를 사용하여 얻은 것입니다. 스타일은 run이라고 합니다. 단락에는 para.runs로 얻을 수 있는 여러 실행이 포함되어 있습니다. 실행의 특정 텍스트는 run.text로 얻을 수 있습니다. 이제 이해하셨으니, 위의 코드를 보시면 좀 더 명확해졌나요?

2) Word 초대장을 PDF 형식으로 변환

이것은 훨씬 간단합니다. Python 자동화 오피스에서는 코드 한 줄로 가능하며 속도도 매우 빠릅니다.

from docx2pdf import convert
convert(f"./邀请函/{name}.docx")

docx 형식 파일을 동일한 이름의 PDF 문서로 변환하려면 변환() 함수를 사용하세요.

3) Excel 테이블에서 이름과 이메일을 읽어보세요.

여기서는 openpyxl 라이브러리를 사용해야 합니다. 물론 Excel에 관한 라이브러리는 여전히 많이 있습니다. 코드는 다음과 같습니다. 다음과 같습니다:

def get_username_email():
    workbook = openpyxl.load_workbook("names.xlsx")
    worksheet = workbook.active
    for index, row in enumerate(worksheet.rows):
        if index > 0:
            name = row[0].value  # 获取表格第一列的姓名
            email = row[3].value  # 获取表格第四列的邮箱
            # print(name, email)
            # print(f"{name}邀请函正在生成...")
            # get_invitation(name)
            send_email(name, email)

上面的代码,理解起来应该并不难,读取Excel中的姓名和邮箱,之后传到get_invitation()生成邀请函,之后传给send_email()函数中自动发送邮件。实际上,这两部是分开进行的,这里是先执行get_invitation()函数,先生成邀请函,之后再将该函数注释掉,再执行发送邮件函数,

4)自动发送邮件

关于自动发送邮件,历史文章中也曾经发布过好几篇了,这里继续用上了,一开始我也觉得挺难的,后来发现也没有想的那么复杂,代码如下:

smtp = smtplib.SMTP(host="smtp.qq.com", port=587)
# smtp.login(邮箱, 授权码)
smtp.login(&#39;235977@qq.com&#39;, "ruybefkipoo")


def send_email(name, email):
    msg = MIMEMultipart()
    msg["subject"] = f"您好,{name},您的邀请函!"
    msg["from"] = "2352180977@qq.com"
    msg["to"] = email

    html_content = f"""
    <html>
        <body>
                <p>您好:{name}<br>
                    <b>欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~</b><br>
                    点击这里了解更多:<a href="https://www.pdcfighting.com">演唱会主页</a>
                </p>
        </body>
    </html>
    """
    html_part = MIMEText(html_content, "html")
    msg.attach(html_part)
    with open(f"./邀请函/{name}.pdf", "rb") as f:
        doc_part = MIMEApplication(f.read())
        doc_part.add_header("Content-Disposition", "attachment", filename=name)
        # 把附件添加到邮件中
        msg.attach(doc_part)
        # 发送前面准备好的邮件
        smtp.send_message(msg)
        # 如果放到外边登录,这里就不用退出服务器连接,所以注释掉了
        # smtp.quit()

这里需要注意三点,其一是邮箱登录放在了函数外边,防止函数多次调用,短时间多次请求登录邮箱被封禁;其二邮箱登录里边用的是授权码,而不是你的邮箱登录密码,这里使用的是qq邮箱做示例,其他邮箱需要更改smtp服务;其三这个代码里边除了正文中引用了html写法,还携带了Pdf格式的邀请函附件,稍显复杂。关于授权码的获取,这里不再赘述了,之前历史文章页写过,网上的教程页很多,不会的话,私我就行。或者参考下面这个文章:手把手教你使用Python网络爬虫实现邮件定时发送(附源码)。

5)完整代码

以上四个步骤进行拆分了,依次完成了Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送任务,这里附上完整的代码。

import docx
from docx2pdf import convert
import openpyxl
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication


# 生成对应的邀请函,并转存pdf格式
def get_invitation(name):
    doc = docx.Document("template.docx")
    for para in doc.paragraphs:
        if &#39;<name>&#39; in para.text:
            for run in para.runs:
                if &#39;<name>&#39; in run.text:
                    run.text = run.text.replace(&#39;<name>&#39;, name)
        doc.save(f&#39;./邀请函/{name}.docx&#39;)
    convert(f"./邀请函/{name}.docx")


smtp = smtplib.SMTP(host="smtp.qq.com", port=587)
smtp.login('235977@qq.com', "ruybefkipoo")


def send_email(name, email):
    msg = MIMEMultipart()
    msg["subject"] = f"您好,{name},您的邀请函!"
    msg["from"] = "2352180977@qq.com"
    msg["to"] = email

    html_content = f"""
    
        
                

您好:{name}
欢迎加入Python进阶者学习交流群,请在附件中查收您的门票~
点击这里了解更多:演唱会主页

""" html_part = MIMEText(html_content, "html") msg.attach(html_part) with open(f"./邀请函/{name}.pdf", "rb") as f: doc_part = MIMEApplication(f.read()) doc_part.add_header("Content-Disposition", "attachment", filename=name) # 把附件添加到邮件中 msg.attach(doc_part) # 发送前面准备好的邮件 smtp.send_message(msg) # 如果放到外边登录,这里就不用退出服务器连接,所以注释掉了 # smtp.quit() def get_username_email(): workbook = openpyxl.load_workbook("names.xlsx") worksheet = workbook.active for index, row in enumerate(worksheet.rows): if index > 0: name = row[0].value email = row[3].value # print(name, email) # print(f"{name}邀请函正在生成...") # get_invitation(name) send_email(name, email) if __name__ == '__main__': get_username_email() # get_invitation('Python进阶者')

总结

这篇文章基于Python自动化办公,主要介绍了使用Python相关库,依次完成Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送任务。程序运行之后,邀请函会自动生成,然后邮件会自动发送,速度也非常快,给几百个、上千个客户发送邀请函就不害怕了,如果有上万个客户,可能需要借助第三方平台辅助了,毕竟一般的普通邮箱,每日发送邮箱数是有限制的。

Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例

人生苦短,我用Python!感谢【麦叔】提供的素材和代码,亲测有效,这里的介绍只是冰山一角,更多内容可以前往《Python办公效率手册》中获取。

Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例

需要源数据的小伙伴可以添加我为好友,私我进行获取,或者前往我的github获取:

https://github.com/cassieeric/Python-office-automation

위 내용은 Py自动化办公—Word文档替换、Excel表格读取、Pdf文件生成和Email自动邮件发送实战案例의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Go语言进阶学习에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제