做技术分享的 PPT,我现在一半靠模板,一半靠脚本
- 2026-11-05 19:54:17
上个月季度复盘,我在组会上讲完之后,新来的同事问我:哥,你这套 PPT 是不是有现成的模板,每次做都挺快的?
我说对,但不全对。模板解决的是排版那一半,另一半是脚本。
想想我刚开始做分享那会儿也是惨。第一次在部门做技术分享,熬到凌晨两点,第二天讲的时候台下注意力全在我那个糊成马赛克的架构图截图上——有人当场举手说"哥这图是不是有压缩算法加成"。从那以后我就开始琢磨怎么把这事儿做得又快又不太丑。
这篇文章把我现在的做法摊开讲讲。没什么高深的东西,但应该能帮你省下一些熬夜排版的时间。
先说几个我翻过车的坑
字太多。有一版复盘 PPT 我往一页里塞了一百多个字,自我感觉信息密度很高。讲的时候发现台下都在低头看屏幕默读,根本没人听我说。后来我才想明白:观众阅读速度比你语速快,字一多他们就去读字了,你就变成人形背景音。现在我的标准是一页正文不超过三行要点,细节全放备注里用嘴讲。
颜色乱用。早期我喜欢搞渐变、搞多彩,一页 PPT 五个颜色。后来有个做设计的朋友看了一眼,说你这像超市传单。她的建议很简单:一个主色加黑白灰,最多再加一个强调色标重点,完事。主色直接从公司 Logo 取,别自己发明颜色,自己调出来的颜色基本都灾难。
贴截图。架构图、监控图、Excel 表格,直接截图往上贴。前面说了,糊。而且尺寸比例还不统一,整页看着特别糙。图表老老实实重新画,或者用工具导出高清图,这一步偷不得懒。
这三条都是学费换来的。别问我怎么知道的。
手动做的部分:大纲、模板、母版
翻完车之后我慢慢固定了一套流程,分三步。
第一步,先写大纲,别碰 PPT 软件。用 markdown 或者随便一个记事本,把要讲的东西列出来。技术分享我基本就一个套路:遇到什么问题 → 现有方案哪里不爽 → 我怎么解决的 → 数据对比 → 踩坑记录。每页对应两三个要点,讲十分钟的话正文页控制在八九页。大纲没定之前打开 PowerPoint,大概率会陷入"先调半小时字体"的自我感动。
第二步,用现成模板起手,别从空白页开始。这步没什么不好意思承认的,模板就是拿来用的。我平时囤模板主要在 PPT集市(网址就是www.pptjishi.com)上找,免费的 .pptx 源文件直接下,按行业、节日、图表这些分类浏览,技术分享场景能淘到不少能直接改的。选模板的时候留意两点:一是必须给源文件,只有预览图的没用;二是模板本身得干净,有的模板带第三方水印、字体还缺,改起来比重做还费劲。
第三步,把固定页面做成自己的母版库。封面、目录、章节过渡页、结尾页,这四类页面每次长得都差不多,我单独存了一个"个人模板.pptx",每次从里面拷。页眉、页码、Logo 这种每页都出现的东西,放进幻灯片母版里设一次就完,千万别一页一页手动复制——别问我怎么知道的,改一次 Logo 位置你就懂了。
内容页没有捷径,还是得自己想怎么讲。但上面这套下来,一页 PPT 里大概六成的排版工作已经省掉了。
脚本搞的部分:python-pptx
真正让我觉得"早该学这个"的是周报。
我们组的周报 PPT 结构是死的:一页概览,然后每页一个指标,标题、数字、环比趋势,格式从来不变,变的只有数字。每周手动复制粘贴改格式,大概要耗四十分钟,纯属体力劳动。
后来我用 python-pptx 把它脚本化了。
pip install python-pptx先来个最小的例子感受下:
from pptx import Presentationfrom pptx.util import Ptfrom pptx.dml.color import RGBColorprs = Presentation()slide = prs.slides.add_slide(prs.slide_layouts[1])# 标题+内容版式slide.shapes.title.text = ”Q4 服务可用性复盘”body = slide.placeholders[1].text_framebody.text = ”可用性 99.97%,超 SLO 目标”p = body.add_paragraph()p.text = ”3 次故障,平均恢复时长 12 分钟”p.font.size = Pt(18)p.font.color.rgb = RGBColor(0x33, 0x33, 0x33)prs.save(”weekly_report.pptx”)
能跑,但这么一页页 new 出来的 PPT 很丑——样式全靠代码里硬编码,等于换个地方手写排版。
正确姿势是反过来:模板里把版式设计好,代码只负责往里灌数据。具体做法是在模板页里放占位文本,比如 {{title}}、{{value}},然后脚本按名字查找替换:
import csvfrom pptx import PresentationTEMPLATE = ”template.pptx”DATA_CSV = ”metrics.csv”# 列: title, value, trendprs = Presentation(TEMPLATE)def replace_text(slide, mapping):for shape in slide.shapes:if not shape.has_text_frame:continuefor para in shape.text_frame.paragraphs:for run in para.runs:if run.text in mapping:run.text = mapping[run.text]with open(DATA_CSV, newline=””, encoding=”utf-8”) as f:for row in csv.DictReader(f):layout = prs.slides[1].slide_layout# 第2页做成”数据页”版式new_slide = prs.slides.add_slide(layout)replace_text(new_slide, {”{{title}}”: row[”title”],”{{value}}”: row[”value”],”{{trend}}”: row[”trend”],})prs.save(”batch_output.pptx”)
跑一次,四十分钟的活变成十秒。下面是几个我用血泪换来的细节:
替换一定要改 run.text,别去动整个段落的 text。 段落级重设会把模板里调好的字体、颜色、字号全冲掉,血亏。占位符拆分的时候注意别把{{title}}打成两段 run,那样单 run 匹配不到——真遇到了就把占位符删掉重打一遍。复杂图表别用 python-pptx 画。 它画图的能力很原始。我的做法是 matplotlib 出图, plt.savefig("chart.png", dpi=300),再shapes.add_picture()插进去,又快又好看。字体只选常见的。 在 Linux 服务器上生成的 PPT 拿到 Windows 打开,缺字体整个版式会崩。要么锁定微软雅黑/思源黑体,要么在模板里预设好。 批量任务先干跑一遍。 只打印替换结果不落盘,确认没问题再真保存。这个习惯救过我不止一次。
至于该自动化什么,我的判断标准很简单:结构固定、数据变的,脚本干;故事和设计要动的,人干。周报、监控快照、批量发证书,都适合脚本化;真正重要的技术分享,主线还是得自己一页页磨,那个偷不了懒。
发布前我必查的几样
不成体系,就是吃过亏之后记在备忘录里的:
演讲者备注写了吗(写提词,别写全文,写全文你会照着念) 字体在演示的电脑上有吗,没有就嵌进去 图表里的数字和最新数据对过了吗(有次我讲的还是上周的数字,当场社死) 导出一份 PDF 放 U 盘里,现场电脑翻车时的保命符 文件别叫 "最终版v3真的最终.pptx",用日期命名: 1101_季度复盘_v3.pptx
差不多就这些。总结起来就一句话:排版交给模板和母版,重复劳动交给脚本,省下来的时间拿去琢磨怎么讲。