Python使用openpyxl读取Excel文件详解
本文详细介绍Python中openpyxl模块读取Excel文件的方法。涵盖加载工作簿、获取工作表、读取单元格值、处理行列数据及切片操作等核心功能,帮助开发者高效处理Excel数据。
Excel基础概念与openpyxl安装
Python的openpyxl模块提供了读取和修改Excel文件的功能。

在开始之前,我们需要了解一些Excel的基础概念。
1 Excel基础概念
Excel文件通常被称为工作簿(Workbook)。一个工作簿可以包含多个工作表(Sheet)。用户当前正在查看的表,或者在关闭Excel前最后查看的表,被称为活动表。
每个工作表由列和行组成。列使用从A开始的字母表示,行使用从1开始的数字表示。由特定行和列交叉形成的方格称为单元格(Cell)。每个单元格可以存储数字或文本,所有单元格共同构成了工作表。
2 安装openpyxl
可以通过pip命令安装最新版本的openpyxl。
pip install openpyxl
加载Excel工作簿
3 读取Excel
假设我们有一份包含世界人口统计数据的Excel文档,其内容如下:

3.1 加载工作簿
wb = openpyxl.load_workbook('population.xlsx')
print('wb 类型 :')
print(type(wb), '\n')
运行结果:

wb类型 : <class 'openpyxl.workbook.workbook.Workbook'>
导入openpyxl模块后,可以使用openpyxl.load_workbook() 函数来加载Excel文档。该Excel文件在Python中表示为Workbook对象。
注意:load_workbook() 函数指定的文件必须位于当前工作目录中。可以导入os模块,利用os.getcwd()来查看当前工作目录。os模块还提供了chdir()方法,用于更改当前工作目录。
import os
print('当前工作目录 :')
print(os.getcwd(), '\n')
运行结果:
读取工作表与单元格
3.2 读取Excel工作表(sheet)
...
print('取得所有工作表的表名 :')
print(wb.sheetnames, '\n')
print('取得某张工作表 :')
sheet = wb['Sheet3']
print(type(sheet))
print('表名 - ' + sheet.title, '\n')
print('取得活动工作表 :')
active_sheet = wb.active
print('表名 - ' + active_sheet.title, '\n')
运行结果:
取得所有工作表的表名 : ['Sheet1', 'Sheet2', 'Sheet3']
取得某张工作表 : <class 'openpyxl.worksheet.worksheet.Worksheet'> 表名 - Sheet3
取得活动工作表 : 表名 - Sheet1
- Workbook对象的sheetnames属性可以获取所有sheet表的表名列表。
- Workbook对象的active属性,会获取当前活动表,即打开Excel时默认出现的工作表。
- 获取Worksheet对象后,我们可以通过title属性得到sheet的名称。
3.3 读取单元格(Cell)
...
print('取得 A1 单元格 :')
cell = active_sheet['A1']
print(cell)
print(cell.value, '\n')
print('取得 B1 单元格 :')
cell = active_sheet['B1']
print(cell)
print(cell.value, '\n')
print('行号为 ' + str(cell.row) + ',列号为 ' + str(cell.column) + ' 的单元格,其值为 ' + cell.value, '\n')
print('单元格 ' + cell.coordinate + ' 其值为 ' + cell.value, '\n')
print('取得 C1 单元格的值 :')
print(active_sheet['C1'].value, '\n')
print('通过指定行与列,来获取单元格:')
print(active_sheet.cell(row=1, column=2))
print(active_sheet.cell(row=1, column=2).value)
print('迭代行与列,来获取单元格的值:')
for i in range(1, 8, 2):
print(i, active_sheet.cell(row=i, column=2).value)
print('\n')
运行结果:
取得A1单元格 : <Cell 'Sheet1'.A1> 排名
取得B1单元格 : <Cell 'Sheet1'.B1> 国家
行号为1,列号为2的单元格,其值为 国家
单元格B1其值为 国家
取得C1单元格的值 : 人口
通过指定行与列,来获取单元格: <Cell 'Sheet1'.B1> 国家 迭代行与列,来获取单元格的值: 1 国家 3 印度 5 印度尼西亚 7 巴基斯坦
可以通过单元格的名字(例如:A1)来获取Cell对象。
- Cell对象的value属性,存放的是该单元格中所保存的值。
- Cell对象的row、column和coordinate属性,存放的是该单元格的位置信息。
- 使用字母来指定列有时显得不太直观,因此我们也可以直接通过sheet的cell方法指定行(row)与列(column),来获取单元格Cell对象。
获取工作表大小与列转换
3.4 获取工作表大小
print('获取工作表的大小:')
print('总行数 -> ' + str(active_sheet.max_row))
print('总列数 -> ' + str(active_sheet.max_column))
运行结果:
获取工作表的大小: 总行数 -> 11 总列数 -> 4
Worksheet对象的max_row与max_column,可以获取工作表的总行数与总列数,即工作表的大小。
3.5 列转换函数
openpyxl提供了两个函数,用于转换列号:
- openpyxl.utils.get_column_letter -> 会把数字转化为字母。
- openpyxl.utils.column_index_from_string -> 会把字母转化为数字。
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string
...
print('列转换函数:')
print('[数字转换为字母]')
print('第 1 列 -> ' + get_column_letter(1))
print('第 2 列 -> ' + get_column_letter(2))
print('第 37 列 -> ' + get_column_letter(37))
print('第 818 列 -> ' + get_column_letter(818))
print('[字母转换为数字]')
print('第 A 列 -> ' + str(column_index_from_string('A')))
print('第 CC 列 -> ' + str(column_index_from_string('CC')))
运行结果:
[数字转换为字母] 第1列 -> A 第2列 -> B 第37列 -> AK 第818列 -> AEL [字母转换为数字] 第A列 -> 1 第CC列 -> 81
切片操作与行列获取
3.6 切片
我们可以对Worksheet对象进行切片,取得表格中的一个矩形区域,并迭代遍历这个区域中的所有Cell对象。
print(tuple(active_sheet['A2':'D4']))
for row_objects in active_sheet['A2':'D4']:
for cell_object in row_objects:
print(cell_object.coordinate, cell_object.value)
print('-- 当前行获取结束 --')
运行结果:
((<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>), (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>), (<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.D4>)) A2 1 B2 中国 C2 13.83亿人(2016) D2 9634057 -- 当前行获取结束 -- A3 2 B3 印度 C3 1339180127 D3 2973190 -- 当前行获取结束 -- A4 3 B4 美国 C4 324459463 D4 9147420 -- 当前行获取结束 --
- 这里首先通过tuple()方法,展示出了切片后的所有Cell对象。
- 然后使用了两个for循环,外层for循环会遍历这个切片中的每一行;而内层for循环会遍历该行中的每个单元格。
3.7 获取指定行或指定列
我们可以使用Worksheet对象的rows和columns属性,来获取指定行或者列:
print('获取特定行:')
print(list(active_sheet.rows)[2])
for cell_object in list(active_sheet.rows)[2]:
print(cell_object.value)
print('获取特定列:')
print(list(active_sheet.columns)[2])
for cell_object in list(active_sheet.columns)[2]:
print(cell_object.value)
运行结果:
获取特定行: (<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>) 2 印度 1339180127 2973190 获取特定列: (<Cell 'Sheet1'.C1>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.C5>, <Cell 'Sheet1'.C6>, <Cell 'Sheet1'.C7>, <Cell 'Sheet1'.C8>, <Cell 'Sheet1'.C9>, <Cell 'Sheet1'.C10>, <Cell 'Sheet1'.C11>) 人口 13.83亿人(2016) 1339180127 324459463 263991379 209288278 197015955 190886311 164669751 143989754 129163276
- Worksheet对象的rows或者columns属性,都会返回一个由“行元组”构成的元组。每个行元组都拥有该行中的所有Cell对象。
- 可以通过行元组的下标,来访问具体的Cell对象。
读取Excel总结
读取Excel步骤,总结如下:
- 导入openpyxl模块。调用openpyxl.load_workbook()函数,加载excel文档,获取Workbook对象。
- 调用workbook#active或workbook[${sheet_name}],获取sheet工作簿。
- 传入row和column关键字参数并调用索引或工作表的cell()方法,获取Cell对象。
- 有了Cell对象,就可以执行具体的业务逻辑咯。
总结
以上所述是小编给大家介绍的python的openpyxl模块读取Excel文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









