一. 痛点
运维侠小白有下面烦恼,听说deepseek可以帮助提升学习python的效率,可是deepseek给的代码也报错,怎么办?
deepseek生成的代码也有可能报错,例如:
⏰执行报错:由提示得知,是少导入需要的模块,但是补全,还是报错,这就是deepseek的局限性。需要继续发问,才能解决。
多尝试,困难才会被克服
学习就像追妹子,你只能看到背影,但只要坚持日积月累的付出,迟早她整个人属于你❤。
二.准备工作
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
(1)安装 python-pptx模块
💻 代码:在命令行终端执行
# 安装必要库(命令行执行)
# pip install python-pptx
(2)PPT结构
元素 | 代码关键字 | 作用说明 |
---|---|---|
母版 | prs.slide_master | 控制全局样式 |
版式集合 | prs.slide_layouts | 所有预定义版式 |
母版占位符 | slide_master.placeholders | 控制全局占位符样式 |
标题占位符 | slide.placeholders[0] | 通常位于页面顶部 |
内容占位符 | slide.placeholders[1] | 支持多级列表 |
页脚占位符] | slide.placeholders[2] | 底部固定信息区域 |
(3)结构解剖图
三.基础:常用方法详解
⚠️避免报错:
- 文件路径 没有写绝对路径默认是处理python代码所在路径的文件,因此需要把代码文件放到这个处理的文件同一文件夹里。
- 修改部分代码 可以举一反三。
(1)新建空白版式ppt
✅ 元素定位之后我们有其他操作,比如,输入文字、点击搜索,为简化方便理解只展示定位。
💻 代码:
from pptx import Presentation
# 创建新工地
prs = Presentation() # 相当于新建PPT文件
# 选择毛坯房户型(内置版式)
title_slide_layout = prs.slide_layouts[0] # 0号是标题页版式
content_slide_layout = prs.slide_layouts[1] # 1号是内容页版式
# 盖新楼层
slide = prs.slides.add_slide(title_slide_layout) # 添加指定版式的幻灯片
prs.save(r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\新建PPT-1.pptx")
如图:
(2)创建标题、副标题
💻 代码:
from pptx import Presentation
文件 = Presentation() # 创建一个PPT容器
幻灯片 = 文件.slides.add_slide(文件.slide_layouts[0])
标题 = 幻灯片.shapes.title
副标题 = 幻灯片.placeholders[1]
标题.text = '技术职场教练'
副标题.text = 'python 办公自动化'
文件.save(r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\百页宝典.pptx") # 功德圆满
如图:
(3)创建正文
💻 代码:
from pptx import Presentation
# 1.创建一个PPT容器
文件 = Presentation()
幻灯片 = 文件.slides.add_slide(文件.slide_layouts[1])
标题 = 幻灯片.shapes.title
正文 = 幻灯片.shapes.placeholders[1]
# 2.添加内容
标题.text = '年度KPI回顾'
文本框 = 正文.text_frame
文本框.text = "重点项目"
# 3.保存
文件.save(r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\年度KPI回顾_添加段落.pptx")
📦如图:
(4)添加段落
💻 代码:
from pptx import Presentation
# 1.创建一个PPT容器
文件 = Presentation()
幻灯片 = 文件.slides.add_slide(文件.slide_layouts[1])
标题 = 幻灯片.shapes.title
正文 = 幻灯片.shapes.placeholders[1]
# 2.添加内容
标题.text = '年度KPI回顾'
文本框 = 正文.text_frame
文本框.text = "重点项目"
段落 = 文本框.add_paragraph()
段落.text = "长坂坡项目:成功用嗓门吓退83万曹军(达成率1000%)"
段落 = 文本框.add_paragraph()
段落.text = "入川战役:暴揍严颜后收获迷弟一枚(现为VIP快递员)"
# 3.保存
文件.save(r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\年度KPI回顾_添加段落1.pptx")
📦如图:
(5)添加层级关系
💻 代码:
from pptx import Presentation
# 1.创建一个PPT容器
文件 = Presentation()
幻灯片 = 文件.slides.add_slide(文件.slide_layouts[1])
标题 = 幻灯片.shapes.title
正文 = 幻灯片.shapes.placeholders[1]
# 2.添加内容
标题.text = '年度KPI回顾'
文本框 = 正文.text_frame
文本框.text = "重点项目"
文本框.level = 1
段落 = 文本框.add_paragraph()
段落.text = "长坂坡项目:成功用嗓门吓退83万曹军(达成率1000%)"
段落.level = 2
段落 = 文本框.add_paragraph()
段落.level = 2
段落.text = "入川战役:暴揍严颜后收获迷弟一枚(现为VIP快递员)"
# 3.保存
文件.save(r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\年度KPI回顾_添加层级段落.pptx")
📦如图:
💡 扩展性:朋友们!实际中,我们可能需要添加多个层级,只要按照此种方法,增加代码即可!
(6)设置样式
💻 代码:
from pptx import Presentation
from pptx.util import Cm,Pt
# 1.创建一个PPT容器
文件 = Presentation()
幻灯片 = 文件.slides.add_slide(文件.slide_layouts[6])
# 2.设置样式
left = top = width = height =Cm(4)
文本框对象 = 幻灯片.shapes.add_textbox(left,top,width,height)
文本框 = 文本框对象.text_frame
文本框.text = '未达标项'
段落 = 文本框.add_paragraph()
段落.text = '戒酒计划失败(误砸张郃家水壶后,被军师罚写《酒与蛇矛的平衡之道》3000字)'
段落.font.bold = True
段落.font.size = Pt(40)
段落.font.name = '微软雅黑'
# 3.保存
文件.save(r"C:\Users\ZHAOY\PycharmProjects\1\整理后的文件\文档\年度KPI回顾_设置样式.pptx")
📦如图:
四.实战案例集锦:
实战综合示例:PPT文字批量替换:3行代码拯救发际线
💻 代码:
# 文字批量替换
from pptx import Presentation
def replace_text_preserve_format(ppt_path, old_text, new_text):
prs = Presentation(ppt_path) # 打开PPT保险柜
# 三层嵌套精准定位
for slide in prs.slides: # 第一层:翻页
for shape in slide.shapes: # 第二层:扫描元素
if shape.has_text_frame: # 发现文本框!
for paragraph in shape.text_frame.paragraphs: # 第三层:段落级
for run in paragraph.runs: # 第四层:文字块级
if old_text in run.text:
run.text = run.text.replace(old_text, new_text) # 外科手术式替换
prs.save(f"format_keep_{ppt_path}") # 安全保存
print("✓ 格式保卫战胜利!获得成就:Tony老师")
# 使用示例(把"老板"改为"最帅的领航员")
replace_text_preserve_format("年度KPI回顾_设置样式.pptx", "误砸张郃家水壶后,被军师罚写《酒与蛇矛的平衡之道》3000字", "罚写《酒与蛇矛的平衡之道》")
源ppt图:
效果图:
📒避坑指南:
- 实际开发中建议多次测试修改,某些函数,可能新老版本ppt软件不兼容。
- 特殊区域处理:
`# 处理表格单元格
if shape.has_table:
for cell in shape.table.iter_cells():
for paragraph in cell.text_frame.paragraphs:
# 同上处理逻辑
处理图表标题
if shape.has_chart:
shape.chart.chart_title.text_frame.text = “新标题”
💡 调试技巧:先测试单个文档生成,再扩展为批量处理
💡在评论区告诉我,下期教你用Python搞定!