📎 配套资产 / 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,系统才知道去哪找它。如果没勾,后面 python 和 pip 都会报"不是内部或外部命令",所有步骤卡死。忘勾了也没关系——重跑一遍安装包,选"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 运行它

在命令行里,先 cd 到 run.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.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 列"。跑通的那一刻,你就已经迈过"零基础"的门槛了。


由在线工具箱(www.vba.net)整理制作