📎 配套资产 / Companion assets:本篇所有示例的可下载文件在仓库
配套资产/B25_批量Excel/——批量处理脚本 + 示例文件生成器 + requirements.txt,每个子目录都带中文 README 与 English README。 English: downloadable files for every example in this article live in配套资产/B25_批量Excel/— batch-processing script + sample-file generator + requirements.txt, each with a bilingual README.
用 Python + openpyxl 批量处理 Excel
1. 摘要
零编程基础也能跑通第一个 Excel 批处理脚本:读取某格、写入某格、另存为新文件。读完后你将拥有一个真实可运行的 Python 小脚本,为后续"用代码批量干重复的活"打底。
2. 痛点:重复手工改几十个 Excel 太累
先说门槛:本篇是 L1 里动手门槛偏高的两篇之一(需要安装 Python 环境)。篇内为安装和排错做了兜底,但仍建议先完成 B1/B5/B9/B21 建立手感,再来碰代码。
你大概率遇到过这些场景:
- 月底要给 30 张销售表都改同一个表头、补一个"负责人"列——一张张打开、手填、保存,复制粘贴到手酸;
- 每周要把 N 个部门的表做同样的格式调整,步骤一模一样,纯属机械劳动;
- 想从一堆表里"把 A 列搬到 B 列""把 C 格内容改掉",找不到现成功能,只能人肉点。
这些活儿的特点是:规则固定、量大、重复。人做容易漏、容易错;而代码最擅长这种"照着规则重复做"的事。
你不需要先成为程序员。这篇就带你用 Python + 一个叫 openpyxl 的库,跑通最小可行脚本:读一格、写一格、存成新文件。先让"代码替你改一个文件"跑起来,后面再谈怎么一次改一百个。
3. 目标:跑通一个读 + 写的小脚本
读完并照做,你会得到:
- 一台装好 Python、且能从命令行直接调用 Python 的电脑;
- 装好
openpyxl库; - 一段真实可运行的脚本,能打开
demo.xlsx、读取A1、写入B1、另存为demo_新.xlsx; - 一句"让 AI 帮你读懂/改写这段代码"的提示词模板。
重要前提:本篇是 L1 基础篇,只要求你会用鼠标、会打开"命令提示符/终端"。代码全部复制即用,不用自己敲。
4. 环境准备
4.1 安装 Python(务必勾选 Add Python to PATH)
- 打开浏览器,访问 Python 官网下载页(python.org → Downloads),下载最新稳定版的 Windows 安装包(如
python-3.x.x.exe)。 - 双击安装包启动安装向导。最关键的一步:在第一个界面下方,务必勾选
Add Python to PATH("将 Python 添加到 PATH")这个复选框,然后点"Install Now"。 - 安装完成后关闭窗口。
为什么要勾 PATH?PATH 是操作系统的"命令搜索路径"。勾选后,你在任意目录的命令行里输入
python,系统才知道去哪找它。如果没勾,后面python和pip都会报"不是内部或外部命令",所有步骤卡死。忘勾了也没关系——重跑一遍安装包,选"Modify",把 "Add Python to environment variables" 勾上即可。
4.2 验证 Python 已可用
- 按
Win键,输入cmd,回车,打开"命令提示符"(也可以用 PowerShell)。 - 输入下面这条命令并回车:
bashpython --version
- 如果正常显示类似
Python 3.x.x,说明 PATH 配好了,继续。- 如果提示"'python' 不是内部或外部命令",说明 PATH 没配好,回到 4.1 重装并勾选 PATH。
4.3 安装 openpyxl 库
在刚才的命令行里输入(pip 是 Python 自带的包管理工具,用来安装第三方库):
bashpip install openpyxl
如果
pip也提示找不到命令,多半是 PATH 没配好。最稳的做法是用py启动器(安装 Python 时默认注册到系统目录C:\Windows\py.exe,即便没勾 Add Python to PATH 也能用):py -m pip install openpyxl。如果你确认python能正常调起,也可以用python -m pip install openpyxl——它的好处是确保包装进「当前这个 python」里,避免电脑里有多套 Python 时装错位置。
4.4 验证库安装成功
bashpython -c "import openpyxl; print(openpyxl.__version__)"
如果打印出一个版本号(如 3.1.2),恭喜,openpyxl 已就绪,可以写脚本了。
5. 第一个脚本:读一格、写一格、另存
5.1 准备一个测试文件
先新建一个 Excel 文件,在里面随便写点东西,命名为 demo.xlsx,保存好。例如:
| A1 | B1 |
|---|---|
| 原始数据 | (留空) |
⚠️ 先备份! 练习时务必用一份"不重要/可丢弃"的
demo.xlsx,别拿正在用的真实业务表练手。openpyxl 的save()会覆盖你保存路径上的文件,一旦覆盖原数据很难找回。
5.2 写脚本
打开系统自带的"记事本"(或任意文本编辑器),粘贴下面这段代码,保存为 run.py(和 demo.xlsx 放在同一个文件夹里)。
python# run.py —— 用 openpyxl 读取并写入 Excel(L1 最小示例)
from openpyxl import load_workbook
# 1. 打开已有的 Excel 文件
# 注意:openpyxl 只支持 .xlsx 格式,老式的 .xls 打不开
wb = load_workbook("demo.xlsx")
# 2. 拿到当前工作表(active = 文件上次保存时停留的那张表)
ws = wb.active
# 3. 读取 A1 单元格的内容
print("A1 单元格原来的内容是:", ws["A1"].value)
# 4. 演示单元格坐标 API:cell.row / cell.column
c = ws["A1"]
print("这个单元格的行号 row =", c.row) # 输出 1
print("这个单元格的列号 column =", c.column) # 输出 1(A 列 = 第 1 列)
# 5. 写入 B1 单元格(赋值即写入,此时只是在内存里改,还没落到磁盘)
ws["B1"] = "由 openpyxl 写入"
# 6. 另存为新文件,绝不原地覆盖原文件
# 建议文件名带 "_新" 或 "_out",和原始文件区分开
wb.save("demo_新.xlsx")
print("完成!已生成 demo_新.xlsx")5.3 运行它
在命令行里,先 cd 到 run.py 所在的文件夹(例如 cd C:\Users\你\Desktop\练习),然后运行:
bashpython run.py
看到打印出 A1 单元格原来的内容是:... 和 完成!已生成 demo_新.xlsx,就成功了。打开生成的 demo_新.xlsx,你会看到 B1 已经被填上了"由 openpyxl 写入",而原来的 demo.xlsx 纹丝未动。
5.4 关键点小结
load_workbook("demo.xlsx"):打开已存在的.xlsx文件。wb.active:取当前工作表;也可以用wb["Sheet1"]按表名取。ws["A1"].value:读某格的内容;ws["B1"] = ...:写某格。c.row/c.column:单元格的行号、列号(都是整数,A=1, B=2 …)。wb.save("demo_新.xlsx"):另存为,路径指向新文件名,避免覆盖。
想从零新建一个文件?用
from openpyxl import Workbook,然后wb = Workbook()、ws = wb.active、ws["A1"]="你好"、wb.save("新建.xlsx")。Workbook()是"建新本",load_workbook()是"开旧本",记住这俩区别即可。
6. 如何用 AI 帮你看懂 / 改写这段代码
你不用自己背 API。把代码丢给 AI(如通用助手),让它解释或改,是最快的学法。给一段可复制的提示词模板:
下面是一段用 Python openpyxl 处理 Excel 的代码:
[把 run.py 的内容粘贴到这里]
请帮我做三件事:
1. 用大白话逐行解释这段脚本在干什么;
2. 我想把它改成"遍历 A 列所有有内容的行,把每行 B 列写成'A列的2倍'",请直接给我修改后的完整代码;
3. 列出这段代码在哪些情况下会报错(比如文件不存在、不是 .xlsx),以及怎么避免。把运行结果拿回来,先自己核一遍(数据对不对、有没有改坏原文件),再交差——这是用 AI 写代码的基本纪律。
7. 常见问题 / 排错
ModuleNotFoundError: No module named 'openpyxl'表示库没装好或装到了别的 Python 上。重跑pip install openpyxl,并确认运行脚本用的python和安装时的是同一个(用python -m pip install openpyxl最稳)。FileNotFoundError: [Errno 2] No such file or directory: 'demo.xlsx'脚本找不到文件。确认demo.xlsx和run.py在同一个文件夹,且命令行当前目录就是那个文件夹(cd进去再跑)。BadZipFile: File is not a zip file或"文件格式不对" 多半是你手上是老.xls文件。openpyxl 不支持 .xls(它本质是读 zip 格式的 xlsx)。请先在 Excel 里"另存为"成.xlsx再处理。改完发现原文件被覆盖了
save()会直接写你给的路径。只要路径写的是原文件名就会覆盖。养成习惯:永远 save 到一个新文件名,原文件只读不写。python提示不是内部或外部命令 回到第 4 节重装 Python 并勾选 Add Python to PATH。
8. 小结 + 进阶延展
一句话回顾:装好带 PATH 的 Python → pip install openpyxl → 用 load_workbook 开 .xlsx、ws["A1"] 读写、wb.save 另存为新文件,你的第一个 Excel 批处理脚本就跑通了。
想继续往前走:
- B26《用 AI 写 Power Query M 查询做数据清洗》(同一 Track T7 办公开发的下一篇):把"改一个格"升级成"按条件筛选、分组汇总、跨表合并"的自动化流程——这正是下一篇 M 查询的主场;更复杂的数据分析再考虑 pandas。
- T7 办公开发系列其他篇目:从"单文件读写"到"批量遍历上百个文件""按模板自动生成报表",逐步把重复劳动彻底交给代码。
- 复习提示词(A3):本篇第 6 节的提示词模板,结合 A3 提示词入门,能让你越来越会"指挥 AI 帮你写/改代码"。
9. CTA(可选)
动手做一遍,比看十遍都有用:现在就建个 demo.xlsx,把第 5 节的 run.py 跑通,再让 AI 帮你改成"批量改 B 列"。跑通的那一刻,你就已经迈过"零基础"的门槛了。