第3章:openpyxl库入门:安装、创建、保存与加载工作簿

好,咱们正式开始玩转 openpyxl。这个库,说白了就是 Python 操作 Excel 的瑞士军刀。我最早接触它,是因为要给财务部做自动化报表——手动复制粘贴到崩溃,后来发现用 openpyxl 几行代码就搞定了。嗯,今天咱们就从最基础的四个动作开始:安装、创建、保存、加载。

3.1 安装 openpyxl

安装这事儿,其实一句话就能说清楚。但我在项目里见过太多人卡在这一步——不是装不上,是装错了环境。

打开你的终端(Windows 用 cmd 或 PowerShell,Mac/Linux 用终端),直接敲:

pip install openpyxl

如果你用的是 Python 3,有些系统里 pip 可能指向 Python 2,这时候用:

pip3 install openpyxl

我个人习惯用虚拟环境,避免把系统搞乱。你可以这样:

python -m venv excel_env
# Windows 激活
excel_env\Scripts\activate
# Mac/Linux 激活
source excel_env/bin/activate
pip install openpyxl
小提示: 安装完成后,在 Python 里输入 import openpyxl 不报错,就说明成了。我曾经遇到一个学员,装完还是报错,结果发现他电脑里有两个 Python 版本,pip 装到了旧版上。你想想看,这种坑多冤枉。

3.2 创建工作簿

安装好了,咱们来写第一行代码。创建一个全新的工作簿,就像在 Excel 里点「新建空白工作簿」一样。

import openpyxl

# 创建一个新的工作簿
wb = openpyxl.Workbook()

就这么简单。wb 就是咱们的工作簿对象。默认情况下,它会自带一个工作表,名字叫「Sheet」。你可以通过 wb.active 拿到当前活动的工作表:

ws = wb.active
print(ws.title)  # 输出:Sheet

我个人习惯,创建完工作簿后,第一件事就是给工作表改个有意义的名字。比如:

ws.title = "销售数据"

为什么?因为我在项目里吃过亏——生成几十个报表,全是 Sheet1、Sheet2,交接给同事时人家一脸懵。嗯,命名规范真的很重要。

3.3 保存工作簿

创建了工作簿,往里面写了数据(咱们后面章节会细讲),最后一步就是保存。保存用 save() 方法:

wb.save("我的第一个工作簿.xlsx")

这里要注意几点:

  • 文件路径可以是相对路径,也可以是绝对路径。我建议用绝对路径,尤其是在自动化脚本里,避免找不到文件。
  • 文件后缀必须是 .xlsx,不能是 .xls。openpyxl 不支持老版的 xls 格式。
  • 如果文件已经存在,保存时会直接覆盖。嗯,这里要小心——我曾经手滑覆盖了一个重要的报表,还好有备份。
警告: 保存操作会覆盖已有文件。如果你不想丢失原文件,保存前先检查一下文件名,或者用时间戳生成唯一文件名。比如:f"报表_{datetime.now().strftime('%Y%m%d_%H%M%S')}.xlsx"

3.4 加载已有工作簿

很多时候,咱们不是从零开始,而是需要修改一个已有的 Excel 文件。比如,每天从系统导出一个报表,咱们用 Python 自动处理它。这时候就需要加载已有工作簿。

import openpyxl

# 加载已有工作簿
wb = openpyxl.load_workbook("已有文件.xlsx")

加载后,你可以通过工作表名来获取具体的工作表:

ws = wb["Sheet1"]  # 或者 wb.active 获取当前活动工作表

然后你就可以读取里面的数据、修改、再保存。举个例子:

wb = openpyxl.load_workbook("销售数据.xlsx")
ws = wb.active
# 读取 A1 单元格的值
print(ws["A1"].value)
# 修改 B2 单元格的值
ws["B2"] = "已更新"
# 保存
wb.save("销售数据_已更新.xlsx")

这里有个坑,我必须要说。加载大文件时,openpyxl 默认是「只读模式」?其实不是,它默认是读写模式。但如果你只想读取数据,可以用 read_only=True 来节省内存:

wb = openpyxl.load_workbook("超大文件.xlsx", read_only=True)

为什么?因为 openpyxl 加载文件时会把整个文件读入内存。如果文件有几十兆甚至上百兆,内存占用会很高。我在处理一个 50MB 的报表时,差点把笔记本搞死机。后来用了只读模式,内存占用直接降了 80%。

3.5 完整示例:从创建到保存

咱们把今天学的串起来,写一个完整的例子:

import openpyxl

# 1. 创建工作簿
wb = openpyxl.Workbook()

# 2. 获取活动工作表并改名
ws = wb.active
ws.title = "员工信息"

# 3. 写入一些数据
ws["A1"] = "姓名"
ws["B1"] = "部门"
ws["C1"] = "工号"
ws["A2"] = "张三"
ws["B2"] = "技术部"
ws["C2"] = "1001"

# 4. 保存
wb.save("员工信息表.xlsx")
print("文件已保存!")

# 5. 加载并验证
wb2 = openpyxl.load_workbook("员工信息表.xlsx")
ws2 = wb2.active
print(f"工作表名:{ws2.title}")
print(f"A1 内容:{ws2['A1'].value}")

运行这段代码,你会看到控制台输出:

文件已保存!
工作表名:员工信息
A1 内容:姓名

嗯,到这里,openpyxl 的入门四步走就讲完了。你想想看,是不是比手动操作 Excel 爽多了?下一章咱们会深入单元格操作,包括读写数据、格式化、合并单元格等等。到时候你会觉得,Excel 自动化这事儿,真没那么玄乎。

核心要点回顾:
  • 安装:pip install openpyxl
  • 创建:wb = openpyxl.Workbook()
  • 保存:wb.save("文件名.xlsx")
  • 加载:wb = openpyxl.load_workbook("文件名.xlsx")
  • 注意文件后缀、内存占用、覆盖风险