Python办公自动化(4)对PPT&邮箱的操作

1.对PPT的操作

在终端中,下载操作PPT文件的工具库:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple python-pptx

1.创建PPT

python 复制代码
import pptx
p = pptx.Presentation() # 生成ppt对象
# 选择布局
layout = p.slide_layouts[1]# 共提供了9种布局0-8
slide = p.slides.add_slide(layout)
p.save('test1.ppt')

2.段落的使用

python 复制代码
import pptx
# 生成ppt对象
p = pptx.Presentation()
# 选择布局
layout = p.slide_layouts[1]
slide = p.slides.add_slide(layout)
#段落的使用
title = slide.placeholders[0]
title.text = '题目'
placeholder = slide.placeholders[1]
placeholder.text = 'Python办公自动化操作PPT\n使用场景非常多'
p.save('test2.ppt')

3.创建多个段落

python 复制代码
import pptx
from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT
from pptx.util import Pt
# 生成ppt对象
p = pptx.Presentation()
# 选择布局
layout = p.slide_layouts[1]
slide = p.slides.add_slide(layout)
#段落的使用
title = slide.placeholders[0]
title.text = '题目'
placeholder = slide.placeholders[1]
paragraph1 = placeholder.text_frame.add_paragraph()
paragraph1.text = 'Java语言通常用于构建工程'
paragraph1.bold = True
paragraph1.font.italic = True
paragraph1.font.size = Pt(16)
paragraph1.alignment = PP_PARAGRAPH_ALIGNMENT.CENTER
paragraph2 = placeholder.text_frame.add_paragraph()
paragraph2.text = 'Python语言通常情况用于完成特定功能,如数据分析数据采取,办公自动化等'
paragraph2.font.size = Pt(16)
paragraph2.alignment = PP_PARAGRAPH_ALIGNMENT.RIGHT
p.save('test3.ppt')

4.自定义的段落

python 复制代码
import pptx
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT
from pptx.util import Pt, Inches
# 生成ppt对象
p = pptx.Presentation()
# 选择布局
layout = p.slide_layouts[1]
slide = p.slides.add_slide(layout)
left = top = width = height = Inches(5)
box = slide.shapes.add_textbox(left,top,width,height)
para = box.text_frame.add_paragraph()
para.text = "这是一个自定义的段落"
para.alignment = PP_PARAGRAPH_ALIGNMENT.CENTER
para.font.size = Pt(30)
para.font.color.rgb = RGBColor(255,0,0)
para.font.name = '微软雅黑'
p.save('test4.ppt')

5.添加表格

python 复制代码
import pptx
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_PARAGRAPH_ALIGNMENT
from pptx.util import Pt, Inches
# 生成ppt对象
p = pptx.Presentation()
# 选择布局
layout = p.slide_layouts[1]
slide = p.slides.add_slide(layout)
rows = 10
cols = 2
left = top =Inches(2)
width = Inches(6)
height =Inches(1)
table = slide.shapes.add_table(rows,cols,left,top,width,height).table
for index,_ in enumerate(range(rows)):
    for sub_index in range(cols):
        table.cell(index,sub_index).text = '%s:%s' % (index,sub_index)
p.save('test5.ppt')

6.添加图片

python 复制代码
import pptx
from pptx.util import Inches
# 生成ppt对象
p = pptx.Presentation()
# 选择布局
layout = p.slide_layouts[1]
slide = p.slides.add_slide(layout)
slide.shapes.add_picture(image_file='1.jpg',width=Inches(6),height=Inches(6),left=Inches(1),top=Inches(1))
p.save('test6.ppt')

7.读取PPT

python 复制代码
import pptx
p = pptx.Presentation('test3.ppt')
for slide in p.slides:
    for shape in slide.shapes:
        if shape.has_text_frame:
            print(shape.text_frame.text)
        if shape.has_table:
            for cell in shape.table.iter_cells():
                print(cell.text)

2.对邮箱的操作

1.获取授权码

以QQ邮箱为例

2.发送普通邮件

在终端中,下载发送邮件的工具库:

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple schedule

1.发送一个基础邮件

python 复制代码
import smtplib
from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText
from email.header import Header

mail_host = 'smtp.qq.com' # smtp.163.com
mail_user = '1234567890@qq.com'
mail_pass = 'khamipuqfyabcdef' # 不是登录邮箱的密码,是授权码

sender = '1234567890@qq.com' # 发送者邮箱
receivers = ['1234567890@qq.com'] #接收者邮箱

message = MIMEText('这是一个测试邮件','plain','utf-8') #发送内容

message['From'] = Header(sender) # 配置发送者
message['Subject'] = Header('Python办公自动化邮件操作','utf-8')

try:
    smtpobj = smtplib.SMTP_SSL(mail_host,465)
    # smtpobj = smtpobj.SMTP() #连接163
    # smtpobj.connect(mail_host,25) # 连接163
    smtpobj.login(mail_user,mail_pass)
    smtpobj.sendmail(sender,receivers,message.as_string())
except smtplib.SMTPException as e:
    print('error :%s'%e)

2.发送一个html

python 复制代码
# message = MIMEText('这是一个测试邮件','plain','utf-8')👇
message = MIMEText('<p style="color:red">这是一个段落</p>','html','utf-8')

3.发送带附件的邮件

python 复制代码
# message = MIMEText('这是一个测试邮件','plain','utf-8')
# message = MIMEText('<p style="color:red">这是一个段落</p>','html','utf-8')
message = MIMEMultipart()# 发送带附件的邮件👈

#附件内容与配置
attr = MIMEText(open('1.jpg','rb').read(),'base64','utf-8') #发送文件,已base64的格式对文件进行操作
attr['Content-Type'] = 'application/octet-stream' # 设置请求类型
attr['Content-Disposition'] = 'attachment;filename="1.jpg"'

message.attach(attr) #将配置好的附件参数传递至发送信息函数中
message.attach(MIMEText('这是一个带附件的邮件','plain','utf-8'))# 发送文本信息

3.定时发送邮件

python 复制代码
import smtplib
import time
from email.mime.text import MIMEText
from email.header import Header
import schedule

mail_host = 'smtp.qq.com' # smtp.163.com
mail_user = '1234567890@qq.com'
mail_pass = 'khamipuqfyabcdef' # 不是登录邮箱的密码,是授权码

sender = '1234567890@qq.com' # 发送者邮箱
receivers = ['1234567890@qq.com'] #接收者邮箱

message = MIMEText('这是一个测试邮件', 'plain', 'utf-8')  # 发送内容
message['From'] = Header(sender) # 配置发送者
message['Subject'] = Header('Python办公自动化邮件操作','utf-8')

def send():
    try:
        smtpobj = smtplib.SMTP_SSL(mail_host, 465)
        # smtpobj = smtpobj.SMTP() #连接163
        # smtpobj.connect(mail_host,25) # 连接163
        smtpobj.login(mail_user, mail_pass)
        smtpobj.sendmail(sender, receivers, message.as_string())
    except smtplib.SMTPException as e:
        print('error :%s' % e)

if __name__ == '__main__':
    schedule.every(10).seconds.do(send) #每10秒调用send函数发送数据
    while 1:
        schedule.run_pending() # 执行
        time.sleep(1)
相关推荐
飞翔的佩奇5 分钟前
【完整源码+数据集+部署教程】【运动的&足球】足球比赛分析系统源码&数据集全套:改进yolo11-RFAConv
前端·python·yolo·计算机视觉·数据集·yolo11·足球比赛分析系统
智启七月21 分钟前
Dexbotic 开源深度解析:重构具身智能 VLA 研发的技术基石与实现路径
人工智能·python
夜晚中的人海29 分钟前
【C++】二分查找算法习题
开发语言·c++·算法
beyond阿亮1 小时前
nacos支持MCP Server注册与发现
java·python·ai·nacos·mcp
感哥1 小时前
Python 装饰器
python
快秃头的码农1 小时前
vscode搭建python项目隔离的虚拟环境
ide·vscode·python
mxpan1 小时前
从 0 到 1:用 Python 对接阿里云 DashScope,轻松实现 AI 对话功能
python·ai编程
狮子座的男孩1 小时前
js基础:06、函数(创建函数、参数、返回值、return、立即执行函数、对象(函数))和枚举对象的属性
开发语言·前端·javascript·经验分享·函数·枚举对象·立即执行函数
sulikey1 小时前
【C++ STL 深入解析】insert 与 emplace 的区别与联系(以 multimap 为例)
开发语言·c++·stl·stl容器·insert·emplace