别再手动调PPT了:用Python批量生成文本框,还能自动排版

简介: 小张苦于每周手动制作PPT周报。本文介绍如何用Python库`python-pptx`自动化生成格式统一的周报:从创建文本框、精细控制字体/颜色/对齐,到实现多级列表、模板占位符替换,助运营人员告别重复劳动,5分钟搞定周报。(239字)

小张是个运营,每周五都要做数据周报。

每次打开PPT,新建一页,拖一个文本框进来,调字号、改字体、居中、加粗、换颜色……十几页PPT做下来,大半个下午就没了。

最烦的是,下周还要再来一遍。

她问我:“这些重复操作,能不能让代码帮我做?”

能。Python里有个库叫python-pptx,专门干这事儿。

你可能会想:“我连PPT都没玩明白,还让我写代码?”
代理 IP 使用小技巧 让你的数据抓取效率翻倍 (50).png

别急。做PPT的重复操作,本质上就是三件事:在哪放文本框、写什么字、字长什么样。用代码写一遍,以后每次运行就行,连格式刷都省了。

先搭个最简单的框
你只需要四行代码,就能生成一个文本框。

from pptx import Presentation
from pptx.util import Inches

新建PPT(或者打开现有的)

prs = Presentation()

加一页空白幻灯片

slide = prs.slides.add_slide(prs.slide_layouts[6])

画个文本框:离左边1英寸,离上边1英寸,宽5英寸,高2英寸

textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(5), Inches(2))

写点字进去

textbox.text_frame.text = "我是自动生成的"

保存

prs.save("我的第一个文本框.pptx")

跑一下这段代码,打开生成的PPT,你会在空白页的左上角看到一个文本框。

这里有个概念叫“坐标系统”。PPT里所有东西的位置,都是用英寸(Inches)或者厘米(Cm)来定的。add_textbox的四个参数分别是:

你可以把这些数字随便改,比如Inches(2)就是两英寸。改完再跑一遍,框的位置和大小就变了。

别把字都挤在一起:理解三层结构
你可能会遇到一个情况:在一个文本框里写了好几行字,想单独调整其中一行的样式,发现调不了。

这就涉及到python-pptx里文本的核心结构了。它有三层:

TextFrame(文本框容器):最外层,管整个框的行为,比如边距、垂直对齐、是否自动换行。

Paragraph(段落):中间层,管一段话的行为,比如对齐方式、行间距、项目符号层级。

Run(文字块):最内层,真正管文字长什么样,比如字体、字号、颜色、粗体斜体。

简单说:一个文本框里可以有多个段落,一个段落里可以有多个Run。

为什么要有Run?因为一段话里可能既有普通文字又有加粗红色文字。Run就是用来实现这种“混搭”的。

下面这段代码展示了这三层怎么配合:

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor

prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])

新建文本框

textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(8), Inches(3))
frame = textbox.text_frame

第一段:普通段落

frame.text = "这是第一段"
frame.paragraphs[0].alignment = PP_ALIGN.CENTER # 居中对齐

第二段:手动添加

p2 = frame.add_paragraph()
p2.text = "这是第二段,有特殊格式:"

在第二段里加一个Run,只让"重点"两个字变色

run = p2.add_run()
run.text = "重点"
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0) # 红色
run.font.size = Pt(18)

继续加普通文字

run2 = p2.add_run()
run2.text = " 后面的普通文字"

prs.save("三层结构演示.pptx")

跑完这段,你会看到:第一段居中,第二段里“重点”两个字又大又红又粗,后面的文字保持原样。

这就是Run的威力——精细控制。

让文字更好看:字体、字号、颜色、对齐
做PPT的人都知道,好看的排版离不开这些细节。python-pptx基本都支持。

字体和字号:

run = frame.paragraphs[0].add_run()
run.text = "Hello"
run.font.name = "微软雅黑" # 字体名
run.font.size = Pt(24) # 字号,单位是磅

粗体、斜体、下划线:

run.font.bold = True # 加粗
run.font.italic = True # 斜体
run.font.underline = True # 下划线

颜色:

from pptx.dml.color import RGBColor

RGB颜色,三个数字分别代表红绿蓝,范围0-255

run.font.color.rgb = RGBColor(255, 0, 0) # 红色
run.font.color.rgb = RGBColor(0, 112, 192) # 一种蓝色

段落对齐:

from pptx.enum.text import PP_ALIGN

paragraph.alignment = PP_ALIGN.CENTER # 居中
paragraph.alignment = PP_ALIGN.LEFT # 左对齐
paragraph.alignment = PP_ALIGN.RIGHT # 右对齐

文本框级别的设置(整个框的垂直对齐、边距、自动换行):

from pptx.enum.text import MSO_ANCHOR, MSO_AUTO_SIZE

frame.vertical_anchor = MSO_ANCHOR.MIDDLE # 文字在框里垂直居中
frame.margin_left = Inches(0.2) # 左边距
frame.margin_top = Inches(0.1) # 上边距
frame.word_wrap = True # 自动换行
frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT # 根据文字自动调整框大小

这些设置混在一起用,基本能实现PPT里95%的排版需求。

做出有层次感的文本:项目符号和多级列表
做PPT少不了要点列表。python-pptx支持自动生成项目符号,还能缩进。

from pptx import Presentation
from pptx.util import Inches

prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[6])

textbox = slide.shapes.add_textbox(Inches(1), Inches(1), Inches(6), Inches(3))
frame = textbox.text_frame

清空默认段落,自己从头加

frame.clear()

加三个要点,层级不同

items = [
("核心结论", 0),
(" 营收增长25%", 1),
(" 主要来自华东区", 2),
(" 成本下降10%", 1),
]

for text, level in items:
p = frame.add_paragraph()
p.text = text
p.level = level # 0是最外层,数字越大缩进越多

# 默认就有项目符号,如果想关掉:
# p.bullet = False

prs.save("项目符号演示.pptx")

跑完这段,你会看到一个有层级缩进的列表,就像Word里的多级列表一样。

一个完整例子:批量生成周报
现在把小张的需求串起来。假设她要生成一份周报,包含三部分:标题、核心数据(加粗红色)、分析结论(项目符号)。

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor

def create_report(report_title, key_number, conclusions):
prs = Presentation()

# 封面页
slide = prs.slides.add_slide(prs.slide_layouts[6])

# 标题框
title_box = slide.shapes.add_textbox(Inches(1), Inches(2), Inches(8), Inches(1))
title_frame = title_box.text_frame
title_frame.text = report_title
title_frame.paragraphs[0].alignment = PP_ALIGN.CENTER
title_frame.paragraphs[0].runs[0].font.size = Pt(32)
title_frame.paragraphs[0].runs[0].font.bold = True

# 核心数据框
data_box = slide.shapes.add_textbox(Inches(1), Inches(3.5), Inches(8), Inches(0.8))
data_frame = data_box.text_frame
data_frame.text = f"核心数据:"
run = data_frame.paragraphs[0].add_run()
run.text = f" {key_number}"
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0)
run.font.size = Pt(20)
data_frame.paragraphs[0].alignment = PP_ALIGN.CENTER

# 分析结论页
slide2 = prs.slides.add_slide(prs.slide_layouts[6])
box = slide2.shapes.add_textbox(Inches(1), Inches(1.5), Inches(8), Inches(4))
frame = box.text_frame
frame.text = "分析结论:"
frame.paragraphs[0].font.size = Pt(24)
frame.paragraphs[0].font.bold = True

for conclusion in conclusions:
    p = frame.add_paragraph()
    p.text = conclusion
    p.level = 0
    p.font.size = Pt(16)

prs.save("周报.pptx")
print("周报生成成功!")

调用函数

create_report(
"第45周运营周报",
"GMV突破500万",
["用户活跃度提升12%", "新客转化率创历史新高", "下周重点关注留存率"]
)

小张以后每周只需要改三个参数:标题、核心数字、结论列表。运行一下,几秒钟就能拿到一份格式统一的周报。

遇到模板怎么办?替换占位符
很多公司有自己的PPT模板,标题在固定位置,logo在固定位置。

python-pptx可以打开现有PPT,找到特定的占位符,替换里面的内容。

prs = Presentation("公司模板.pptx")
slide = prs.slides[0] # 取第一页

遍历这一页上所有的占位符

for shape in slide.placeholders:
print(f"占位符ID: {shape.placeholder_format.idx}, 名字: {shape.name}")

根据索引替换

slide.placeholders[0].text = "2025年Q1汇报"
slide.placeholders[1].text = "销售部"

prs.save("填好内容的汇报.pptx")

先跑一下打印占位符的代码,记下每个位置对应的ID,然后就可以用代码批量填充了。

几个容易踩的坑
坑一:修改已有文本框内容时,格式丢了

如果你拿到一个已有的文本框,直接text_frame.text = "新内容",里面的格式会被清空。想保留格式,应该操作具体的段落和Run。

坑二:中文字体显示成方块

必须指定系统里存在的字体。Windows用"微软雅黑"或"SimHei",Mac用"PingFang SC"。不指定的话,可能会用默认字体,中文就变成方块了。

坑三:文本框太小,字显示不全

设置text_frame.auto_size = MSO_AUTO_SIZE.SHAPE_TO_FIT_TEXT,文本框会自动撑大。或者设置text_frame.word_wrap = True让它自动换行。

坑四:添加多个段落时,第一段消失了

刚创建的文本框自带一个空段落。如果你调用add_paragraph()之前没有clear(),那第一段可能会被覆盖。保险做法:加内容之前先text_frame.clear()。

还能做什么?
掌握了文本框,python-pptx还能干更多事:

比如给100份产品介绍PPT统一加上公司logo和联系方式,手改要半天,用代码两秒跑完。

回到小张。她现在每周五上午花两分钟改改参数,然后去倒杯咖啡,回来周报就生成好了。

她说:“以前觉得会写代码的人很酷,现在发现会写代码的自己更酷。”

目录
相关文章
|
2月前
|
索引 Python
Python 操作 Word 页眉页脚完整指南
本文手把手教你用Python(python-docx库)自动为Word文档添加页眉页脚:含公司Logo、保密标识、动态页码、首页/奇偶页差异化设置及批量处理技巧,50页报告1秒搞定,告别手动重复劳动。(239字)
295 0
|
2月前
|
人工智能 API 开发工具
阿里云 Coding Plan 指南:是什么?售罄怎么办?价格与用量额度一次说清
阿里云百炼Coding Plan是面向AI编程的订阅服务,现仅售Pro版(200元/月),含9万次/月请求额度,支持qwen3.5-plus、kimi-k2.5等多模型及OpenClaw等工具,需专用API Key(sk-sp-开头)。Lite版已下架,每日9:30限量抢购。
|
7月前
|
搜索推荐 数据可视化 数据库
用Python轻松打造专业PPT:自动化生成演示文稿全攻略
本文介绍如何用Python的python-pptx库自动化生成PPT,涵盖环境搭建、文本、图片、图表插入,以及批量生成与模板应用技巧。通过代码高效创建格式统一、内容丰富的演示文稿,大幅提升职场效率,适合报告、教学等场景,让PPT制作从繁琐变为智能。
3123 1
|
存储 Ubuntu 关系型数据库
Ubuntu安装MySQL 8.0与Navicat
Ubuntu安装MySQL 8.0 1、更新软件包列表 在添加 MySQL APT 存储库后,运行以下命令以更新软件包列表: sudo apt update 2、安装 MySQL 8.0 现在,你可以使用以下命令来安装 MySQL 8.0: sudo apt install mysql-server-8.0 在安装 MySQL 8.0(或其他软件包)时,通常不会显示密码,因为安装过程不需要您提供密码。安装过程中可能会提示您设置 MySQL root 用户的密码,但这是在 MySQL 服务器配置的步骤中完成的,而不是在 apt 安装命令中提供的。
1361 0
|
2月前
|
XML 搜索推荐 API
管好PPT的“骨架”:用Python控制页面与文档属性
本文介绍如何用Python库`python-pptx`高效批量管理PPT页面:增删改查、重排顺序、复制幻灯片、设置文档属性与页面尺寸等。避开官方限制的“偏方”与稳健替代方案并重,助你将数小时手工操作压缩至几分钟,解放重复劳动。(239字)
177 1
|
2月前
|
人工智能 自然语言处理 测试技术
不会写代码也能做Skill?低代码+AI实测
本文探讨AI时代测试工程师如何零代码打造可复用的AI技能(Skill):从“用AI写脚本”跃迁至“教AI帮别人写脚本”。依托JeecgBoot、OpenClaw、Claude Skill-Creator等低代码+AI工具,测试经验可转化为结构化SOP,封装为AI可理解、执行、共享的能力资产。实操路径清晰,门槛远低于想象。
|
3月前
|
人工智能 IDE API
阿里云百炼 Coding Plan AI 编码订阅计划体验如何?值得买吗?
阿里云百炼Coding Plan是国内性价比最高、模型生态最丰富的AI编程订阅服务之一:支持Qwen3.5/Max/Coder、Kimi、GLM等多模型自由切换,Lite版首月仅7.9元,Pro版39.9元,额度包干、响应极速、中文优化强,无缝接入VS Code/Cursor等主流工具,是开发者首选AI编程方案。(239字)
阿里云百炼 Coding Plan  AI 编码订阅计划体验如何?值得买吗?
|
3月前
|
人工智能 Linux API
10分钟造一个专属技能:OpenClaw自定义Skill开发+阿里云/本地部署及api配置实战手册
2026年,OpenClaw(Clawdbot)的真正强大之处,早已不只是使用现成插件,而是人人都能零代码写出自己的 Skill,让AI完全按照你的工作流执行任务。Skill 本质不是后台插件,而是给AI的一份清晰执行说明书——会写Markdown就能开发,不需要编程基础,不需要懂API,10分钟就能做出可运行、可复用、可分享的技能包。
2775 3