每天与 Excel 表格、Word 文档、PPT 演示稿打交道,是很多岗位的常态。但真正让人疲惫的,往往不是任务本身,而是把同一套复制粘贴、查找替换、重复排版动作循环几十遍。如果你刚开始接触 Python,那么Python 办公自动化很可能是投入产出比最高的一条练习路径:它不需要复杂的算法,也不用先啃厚厚的语法书,只要理解文件结构、学会调用几个第三方库,就能把大量日常工作压缩成“运行一个脚本”。
这篇文章会从零开始,带你完成一个覆盖 Word、Excel、PPT 三类文件的真实办公自动化小项目。整个过程会讲解三个核心库的用法,也会把新手容易踩的坑单独列出来。
阅读本文后,你将掌握:
- 用
openpyxl读取和写入 Excel 数据; - 用
python-docx批量生成 Word 文档; - 用
python-pptx批量生成 PPT 页面; - 把三类文件串成一个完整业务场景,实现一键产出。
1. Python 办公自动化到底能解决什么问题
1.1 办公自动化不只是“替换人工操作”
很多人第一次接触办公自动化,以为它只是用脚本代替鼠标点按钮。这个理解不够准确。办公自动化的核心并不是消灭“人”,而是要把规则固定下来,把可重复的过程变成可按参数调整的程序。
举个例子,行政同事每周要发一份通知,内容是复制员工信息表里的姓名、部门、时间,再替换到 Word 通知模板里。如果只有 10 个人,手动复制并不算难;但如果是 300 人的名单,手动操作就容易漏行、复制错列,甚至格式不一致。程序处理这类问题的优势在于:只要输入数据格式稳定,输出结果就能保持一致。
从文件格式来看,办公自动化的对象通常是 OOXML 体系下的三类文件:
.xlsx:Excel 工作簿,核心是单元格、工作表、工作簿的关系;.docx:Word 文档,核心是段落、Run 文本块、表格;.pptx:PPT 演示文稿,核心是幻灯片、形状、文本框。
理解这三类文件的对象模型,比死记 API 更重要。因为这些库本质上是在解析并重建 XML 结构,当你知道了“文档是由哪些部分组成”,自然就知道该调用什么方法。
1.2 三个核心库各负责什么
| Python 库 | 目标文件 | 主要用途 |
|---|---|---|
openpyxl | xlsx | 读取、写入、修改 Excel 工作表 |
python-docx | docx | 创建、编辑 Word 文档 |
python-pptx | pptx | 创建、编辑 PPT 演示文稿 |
这三个库都是第三方库,安装方式非常接近,都是通过pip安装。后面的章节会逐步展开每一个库的使用。
有的读者可能会有疑问:Excel 文件有 xls 和 xlsx 两种格式,Word 也有 doc 和 docx,PPT 有 ppt 和 pptx,两者有什么区别?
最直接的区别是:
xls、doc、ppt是老版本的二进制格式;xlsx、docx、pptx是较新的 OOXML 格式,本质上是一种 zip 压缩包;- 本文涉及的三个库几乎都只支持新格式,所以如果你拿到的是旧格式文件,需要先通过 Office 软件另存为 xlsx、docx、pptx。
1.3 本文的实战场景设计
为了让例子更接近真实办公,本文选取一个非常经典的行政部门周报场景:
- 有一份
source_data.xlsx员工任务表,里面有姓名、部门、本周核心事项、完成情况、下周计划; - 需要为每位员工生成一份单独的 Word 周报;
- 需要同时生成一份部门周会用的 PPT,把所有员工的周报摘要放在同一份演示文稿里。
这个场景没有用到高深理论,但覆盖了“Excel 读取数据 → Python 程序处理 → Word/PPT 输出文件”的完整链路。只要把这个流程跑通,日后遇到报销单据汇总、工作通知批量发送、产品周报自动生成等需求,都可以沿用同一套思路。
在开始写脚本之前,需要先安装 Python 环境,并准备好第三方库。
2. 环境准备与项目结构
2.1 安装 Python 并验证
本文的代码在 Python 3 环境下运行,建议使用 Python 3.8 及以上版本。
如果你还没有安装 Python,可以去 Python 官网下载对应系统的安装包。安装时需要注意勾选Add Python to PATH,否则在命令行中使用python命令时可能会提示找不到命令。
安装完成后,打开命令行工具(Windows 下可用 PowerShell 或 CMD),执行下面命令验证:
python --version如果输出类似:
Python 3.10.11说明 Python 环境正常。
2.2 安装 openpyxl、python-docx、python-pptx
打开命令行,执行:
pip install openpyxl python-docx python-pptx这里不指定固定版本,因为不同时期最新版本不同,安装最新稳定版即可。如果你所在环境同时存在 Python 2 与 Python 3,在 Windows 上可能需要把pip替换为pip3,或者使用python -m pip install ...的方式安装。
验证安装是否成功,可以在命令行输入:
python -m pip show openpyxl如果能看到库的名称、版本和安装路径,说明安装成功。
2.3 准备项目目录
建议先建立一个独立的项目文件夹,避免把所有代码堆在桌面或下载目录中。
office_auto/ ├── source_data.xlsx # 模拟员工任务表,后面由脚本生成 ├── weekly_report.py # 主脚本 ├── output/ │ ├── word/ # 存放生成的 Word 周报 │ └── week_review.pptx # 存放生成的 PPT └── README.md # 可选项这样做的目的是让输入文件、输出文件、脚本代码分离。真实项目中,输入文件可能来自同事发来的邮件,输出目录建议单独区分,防止程序和业务文件混在一起后误操作。
下面开始进入正题,先逐个学习三个库的基础用法。
3. Excel 自动化:使用 openpyxl 读写数据
3.1 openpyxl 的核心对象
在 openpyxl 中,一个 xlsx 文件被称为Workbook(工作簿)。工作簿下可以有多个Worksheet(工作表),工作表中才是我们熟悉的单元格。
三者关系是:
Workbook(一个 xlsx 文件) └── Worksheet(一张 Sheet,例如 Sheet1) └── Cell(一个单元格,例如 A1)打开现有 Excel 文件的基本写法是:
import openpyxl # 加载工作簿 wb = openpyxl.load_workbook("source_data.xlsx") # 获取当前活动的工作表 ws = wb.active如果你需要指定某一张 Sheet,可以写成:
ws = wb["员工任务表"]读取单元格时,最直接的方式是用类似坐标的写法:
# 读取 A1 单元格 print(ws["A1"].value) # 或者使用 row/column 数字方式 print(ws.cell(row=1, column=1).value)对于新手来说,我建议先记住ws["A1"].value,因为它在理解上更方便,和 Excel 里看到的位置完全一致。
在 openpyxl 中,行号和列号都是从 1 开始计数的,这一点和大多数 Python 习惯从 0 开始计数的方式不同,需要格外注意。
3.2 读取 Excel 数据:一个简单示例
假设你已经有一份考勤汇总.xlsx,第一行是标题,从第二行开始是数据。用下面的代码可以遍历全部行:
import openpyxl wb = openpyxl.load_workbook("考勤汇总.xlsx", data_only=True) ws = wb.active # iter_rows 表示按行遍历,min_row=2 表示从第二行开始 # values_only=True 表示只取单元格的值,不返回单元格对象 for row in ws.iter_rows(min_row=2, values_only=True): name = row[0] department = row[1] work_days = row[2] print(name, department, work_days)这里有一个非常关键的参数data_only=True。它表示读取公式计算结果,而不是公式本身。
如果一个单元格中的内容是类似=A2*0.8的公式,当data_only=False(默认值)时,读取出来的是公式字符串=A2*0.8;当data_only=True时,读取的是 Excel 中缓存的计算结果。不过需要注意,如果这个 Excel 文件从没有用 Excel 或 WPS 打开并保存过,公式缓存可能不存在,此时读取到的会是None。
3.3 向 Excel 写入数据并保存
使用 openpyxl 创建一个新的 xlsx 文件很简单:
from openpyxl import Workbook # 创建工作簿 wb = Workbook() ws = wb.active # 设置 sheet 名称 ws.title = "员工任务表" # 添加标题行 ws.append(["姓名", "部门", "本周核心任务", "完成情况"]) # 添加数据行 ws.append(["张薇", "运营组", "完成公众号活动方案初稿", "已完成"]) ws.append(["韩磊", "技术组", "封装周报生成函数", "进行中"]) # 保存文件 wb.save("source_data.xlsx")ws.append()是按行追加数据,传入的是一个列表,列表中的每个元素对应一个单元格。
这段代码最大的价值在于:你可以用脚本构造模拟数据,方便练习后续的 Word 和 PPT 生成。很多教程一上来就要求读者手动准备一份复杂的 Excel,这其实会降低实践耐心。用代码生成一个可控的小规模 Excel 文件,反而更容易验证后续逻辑。
3.4 简单单元格样式调整
openpyxl 也可以调整字体、背景色、对齐方式、行高列宽。下面这段代码演示了最常用的几种设置:
from openpyxl import Workbook from openpyxl.styles import Font, PatternFill, Alignment from openpyxl.utils import get_column_letter wb = Workbook() ws