读取工作簿
打开并读取 Excel 文件
读取工作簿 是 CoddyKit 上的免费 Python Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
使用 Python 操作 Excel
openpyxl 是用于读取和写入现代 Excel 文件(.xlsx 格式)的标准库。它可以让 Python 自动执行原本需要手动完成的电子表格任务。
本课将重点介绍如何打开文件以及读取其中的内容。
工作簿模型
Excel 文件具有清晰的层次结构,openpyxl 对此进行了对应:
- 工作簿 整个文件
- 工作表 文件中的一个选项卡
- 单元格 一个带有值的 A1 样式方框
您可以依次从工作簿导航到工作表,再导航到单元格。
打开文件
load_workbook('data.xlsx') 会读取文件并返回一个工作簿。对于只需读取的大型文件,请传入 read_only=True,以流式方式读取行并节省内存。
使用 data_only=True 可以读取公式单元格最后一次计算出的结果,而不是公式文本。
选择工作表
wb.active 会返回当前选中的工作表。wb['Sheet1'] 按名称选择工作表,而 wb.sheetnames 会列出所有选项卡。选择正确的工作表是任何读取操作的第一步。
sheetnames = ['Summary', 'Q1', 'Q2', 'Q3']
wanted = 'Q2'
if wanted in sheetnames:
print('Selecting sheet:', wanted)
else:
print('Not found, defaulting to', sheetnames[0])读取单个单元格
您可以通过 Excel 地址访问单元格:ws['A1'].value;也可以使用数字访问:ws.cell(row=1, column=1).value。.value 属性保存实际数据,数据可能是文本、数字、日期或 None。
列字母与数字
Excel 列使用字母表示(A、B、...、Z、AA),但 openpyxl 也使用从 1 开始的数字。有时需要在两者之间进行转换。下面是根据字母获取列号的方法。
def col_to_num(letters):
num = 0
for ch in letters.upper():
num = num * 26 + (ord(ch) - ord('A') + 1)
return num
for c in ['A', 'B', 'Z', 'AA']:
print(c, '->', col_to_num(c))遍历行
ws.iter_rows(values_only=True) 会将每一行作为值元组返回。这是读取表格最简洁的方式。第一行通常是表头。
您可以像遍历任何可迭代对象一样遍历这些行。
rows = [
('Name', 'Age', 'City'),
('Ada', 36, 'London'),
('Linus', 54, 'Helsinki'),
]
header = rows[0]
for record in rows[1:]:
print(dict(zip(header, record)))查找已使用范围
ws.max_row 和 ws.max_column 会告诉您数据延伸到哪里。ws.dimensions 会返回类似 'A1:C10' 的范围字符串。使用它们可以避免读取空单元格。
读取一个范围
您可以对工作表进行切片:ws['A1:C3'] 会返回一个由单元格对象元组组成的行元组。当您只需要工作表的一部分,而不是每一行时,这种方式非常方便。
处理空单元格
空单元格会返回 None。真实的电子表格往往不够规整,因此读取时要防范缺失值,例如用默认值替代它们。这样可以避免后续处理崩溃。
raw_row = ('Ada', None, 'London')
clean = [v if v is not None else 'N/A' for v in raw_row]
print(clean)跨多个工作表读取
一个工作簿可能会将数据分散到多个选项卡中,例如每个月一个选项卡。遍历 wb.sheetnames,选择每个工作表,然后使用相同的逻辑读取。为每一行标记其工作表名称,以便追踪数据来源。
这种模式可以将多个选项卡整合成一个合并数据集。
快速检查
测试您的读取技能。
回顾
现在您已经可以读取 Excel 文件:
- 层次结构:工作簿 > 工作表 > 单元格
- 使用带有
read_only和data_only选项的load_workbook - 通过
wb.active、wb['Name']和wb.sheetnames选择工作表 - 使用
.value和iter_rows(values_only=True)读取,并检查max_row/max_column - 针对空单元格的
None值进行防护
常见问题解答
「读取工作簿」课时是免费的吗?
是的 — 「读取工作簿」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「读取工作簿」这节课中我会学到什么?
打开并读取 Excel 文件 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「读取工作簿」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。