---
title_cn: "用 Python + openpyxl 批量处理 Excel"
title_en: "Batch-Process Excel with Python + openpyxl"
series: "AI 办公实战：从小白到达人"
article_code: "B25"
level: "L1"
category: "AI办公"
subcategory: "办公开发"
tags: "Python,openpyxl,Excel,批量,L1"
status: "草稿"
bilingual_switch: "双语"
author: "程晓"
---


> 📎 **配套资产 / 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
```

3. 如果正常显示类似 `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 列"。跑通的那一刻，你就已经迈过"零基础"的门槛了。

