Python 的标准库中并没有一个叫做 workbook 的模块。

workbook 这个词通常指的是像 Microsoft Excel 或 LibreOffice Calc 这样的电子表格文件(.xlsx, .xls, .ods 等),当人们谈论 Python 中的 "workbook" 时,他们几乎总是指代那些用来操作电子表格文件的第三方库。
最流行、功能最强大的库就是 openpyxl。
下面,我将围绕 openpyxl 来详细解释如何操作 "workbook"(工作簿)。
什么是 openpyxl?
openpyxl 是一个用于读写 Excel 2010 .xlsx 文件的 Python 库,它支持 .xlsx、.xlsm、.xltx 和 .xltm 格式,对于旧版的 .xls 格式,你需要使用另一个库 xlrd(读)和 xlwt(写)。

安装 openpyxl
在使用之前,你需要先安装它,打开你的终端或命令行,运行以下命令:
pip install openpyxl
workbook、worksheet 和 cell 的概念
理解 openpyxl 的核心,首先要理解 Excel 文件的基本结构:
- Workbook (工作簿): 一个 Excel 文件(
report.xlsx)就是一个 Workbook,它是所有数据的容器。 - Worksheet (工作表): 一个 Workbook 可以包含多个工作表,"Sheet1", "Sheet2" 等,你可以把它想象成一张独立的表格。
- Cell (单元格): 工作表中的最小单位,由行和列交叉组成(
A1,B2),每个单元格可以存储数据(文本、数字、公式等)。
openpyxl 的操作逻辑就是:
- 打开一个 Workbook。
- 选择一个 Worksheet。
- 操作 Worksheet 中的 Cell。
openpyxl 的核心操作
下面我们通过代码来学习最常见的操作。
a. 创建一个新的 Workbook 并保存
from openpyxl import Workbook
# 1. 创建一个新的 Workbook 对象
# 默认会创建一个名为 "Sheet" 的工作表
wb = Workbook()
# 2. 获取当前活跃的工作表 (通常是第一个创建的)
ws = wb.active= "销售数据" # 修改工作表名称
# 3. 向单元格写入数据
# 可以直接通过赋值操作
ws['A1'] = "产品名称"
ws['B1'] = "销售额"
ws['A2'] = "笔记本电脑"
ws['B2'] = 15000
ws['A3'] = "手机"
ws['B3'] = 8000
# 4. 保存 Workbook 到一个文件
# 如果文件已存在,它将被覆盖
filename = "sales_report.xlsx"
wb.save(filename)
print(f"文件 '{filename}' 已成功创建!")
b. 打开一个已存在的 Workbook
from openpyxl import load_workbook
# 1. 加载一个已存在的 Workbook
# 注意:文件必须存在
try:
wb = load_workbook("sales_report.xlsx")
print(f"成功加载文件 'sales_report.xlsx'")
# 2. 获取特定名称的工作表
ws = wb["销售数据"]
print(f"正在操作工作表: {ws.title}")
# 3. 读取单元格的值
product_name = ws['A2'].value
sales = ws['B2'].value
print(f"读取到数据: {product_name} 的销售额是 {sales}")
except FileNotFoundError:
print("错误:文件 'sales_report.xlsx' 未找到!")
c. 遍历工作表中的数据
当需要处理大量数据时,逐个单元格引用会很麻烦。openpyxl 提供了多种遍历方式。
from openpyxl import load_workbook
wb = load_workbook("sales_report.xlsx")
ws = wb.active
# --- 方法1:按行遍历 (推荐) ---
# ws.iter_rows() 会返回一个生成器,每次产生一行
# min_row, max_row, min_col, max_col 可以指定范围
print("\n--- 按行遍历数据 ---")
for row in ws.iter_rows(min_row=2, max_row=3, min_col=1, max_col=2):
# row 是一个包含单元格对象的元组,(Cell('A2'), Cell('B2'))
for cell in row:
print(f"单元格 {cell.coordinate} 的值是: {cell.value}")
# --- 方法2:按列遍历 ---
# ws.iter_cols() 会返回一个生成器,每次产生一列
print("\n--- 按列遍历数据 ---")
for col in ws.iter_cols(min_row=1, max_row=3, min_col=1, max_col=2):
for cell in col:
print(f"单元格 {cell.coordinate} 的值是: {cell.value}")
# --- 方法3:直接遍历所有行 ---
# ws.rows 是 ws.iter_rows() 的一个简写形式
print("\n--- 遍历所有行 ---")
for row in ws.rows:
for cell in row:
print(f"{cell.value}", end="\t") # 使用制表符对齐
print() # 换行
d. 添加数据和样式
openpyxl 不仅可以读写数据,还可以修改样式。
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill
wb = Workbook()
ws = wb.active= "格式化示例"
# 1. 写入数据
ws['A1'] = "标题"
ws['B1'] = "数值"
ws['A2'] = "总收入"
ws['B2'] = 50000
# 2. 设置单元格样式
# 字体样式
bold_font = Font(name='微软雅黑', size=12, bold=True, color="FF0000") # 红色粗体
ws['A1'].font = bold_font
# 对齐方式
center_alignment = Alignment(horizontal='center', vertical='center')
ws['A1'].alignment = center_alignment
ws['B1'].alignment = center_alignment
# 填充背景色
yellow_fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")
ws['A1'].fill = yellow_fill
# 3. 调整行高和列宽
ws.row_dimensions[1].height = 30 # 设置第一行的高度
ws.column_dimensions['A'].width = 20 # 设置A列的宽度
# 4. 添加新的行和列
ws.append(["新项目", 3000]) # 在工作表末尾添加一行
ws.insert_cols(3) # 在第3列的位置插入一个空列
wb.save("formatted_report.xlsx")
print("已创建并保存格式化后的文件 'formatted_report.xlsx'")
其他常用的 workbook 库
除了 openpyxl,还有其他一些库也用于操作 Excel,各有侧重:
| 库名称 | 主要特点 | 适用场景 |
|---|---|---|
openpyxl |
功能全面,读写 .xlsx,支持样式、图表等。 |
首选,适用于绝大多数 Excel 文件操作。 |
xlrd / xlwt |
xlrd 只能读旧版 .xls,xlwt 只能写旧版 .xls。 |
处理非常老旧的 Excel 文件(.xls)。 |
pandas |
强大的数据分析库,read_excel() 和 to_excel() 函数是其核心。 |
数据分析,当你需要对表格数据进行计算、清洗、分析时,用 pandas 更方便,它底层也使用 xlrd 或 openpyxl 作为引擎。 |
xlsxwriter |
只能写,不能读,在创建新 .xlsx 文件方面性能极佳,支持非常丰富的样式和图表功能。 |
需要生成大量格式复杂、性能要求高的 Excel 报告时。 |
当你听到 "Python workbook 模块" 时,
- 核心概念: 你要操作的是
Workbook(工作簿)、Worksheet(工作表) 和Cell(单元格)。 - 主要工具: 最常用的是
openpyxl库。 - 基本流程:
- 创建/加载
Workbook(Workbook()/load_workbook())。 - 选择
Worksheet(wb.active/wb['Sheet名'])。 - 读写/修改
Cell(ws['A1'].value = .../value = ws['A1'].value)。 - 保存
Workbook(wb.save('filename.xlsx'))。
- 创建/加载
- 选择库:
- 通用读写和格式化:
openpyxl。 - 数据分析:
pandas。 - 高性能写入:
xlsxwriter。
- 通用读写和格式化:
希望这份详细的讲解能帮助你完全理解 Python 中操作 "workbook" 的概念和方法!
