📎 配套资产 / 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. 目标:跑通一个读 + 写的小脚本

读完并照做,你会得到:

  1. 一台装好 Python、且能从命令行直接调用 Python 的电脑;
  2. 装好 openpyxl 库;
  3. 一段真实可运行的脚本,能打开 demo.xlsx、读取 A1、写入 B1、另存为 demo_新.xlsx
  4. 一句"让 AI 帮你读懂/改写这段代码"的提示词模板。

重要前提:本篇是 L1 基础篇,只要求你会用鼠标、会打开"命令提示符/终端"。代码全部复制即用,不用自己敲。

4. 环境准备

4.1 安装 Python(务必勾选 Add Python to PATH)

  1. 打开浏览器,访问 Python 官网下载页(python.org → Downloads),下载最新稳定版的 Windows 安装包(如 python-3.x.x.exe)。
  2. 双击安装包启动安装向导。最关键的一步:在第一个界面下方,务必勾选 Add Python to PATH("将 Python 添加到 PATH")这个复选框,然后点"Install Now"。
  3. 安装完成后关闭窗口。

为什么要勾 PATH?PATH 是操作系统的"命令搜索路径"。勾选后,你在任意目录的命令行里输入 python,系统才知道去哪找它。如果没勾,后面 pythonpip 都会报"不是内部或外部命令",所有步骤卡死。忘勾了也没关系——重跑一遍安装包,选"Modify",把 "Add Python to environment variables" 勾上即可。

4.2 验证 Python 已可用

  1. Win 键,输入 cmd,回车,打开"命令提示符"(也可以用 PowerShell)。
  2. 输入下面这条命令并回车:
bash
python --version
  1. 如果正常显示类似 Python 3.x.x,说明 PATH 配好了,继续。
    • 如果提示"'python' 不是内部或外部命令",说明 PATH 没配好,回到 4.1 重装并勾选 PATH。

4.3 安装 openpyxl 库

在刚才的命令行里输入(pip 是 Python 自带的包管理工具,用来安装第三方库):

bash
pip 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 验证库安装成功

bash
python -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 运行它

在命令行里,先 cdrun.py 所在的文件夹(例如 cd C:\Users\你\Desktop\练习),然后运行:

bash
python 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.activews["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.xlsxrun.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 列"。跑通的那一刻,你就已经迈过"零基础"的门槛了。