在 Python 中,如果想要读取 Excel 文件,常用的是使用以下 2 种方式来实现。
- pandas 库。
- openpyxl 库。
使用 pandas 库读取 Excel
在 Python 中,我们可以使用 pandas 库的 read_excel() 函数来读取一个 Excel 文件。需要注意的是,pandas 是和 openpyxl 一起搭配使用,才能操作 Excel 文件的。因此在使用之前,需要执行以下命令来安装它们。
pip install pandas
pip install openpyxl语法:
import pandas as pd
pd.read_excel(path, index_col=m, sheet_name=n)说明:
read_excel() 函数接收以下 3 个参数。
path(必选):表示文件路径。index_col(可选):用于将某一列指定为行名。sheet_name(可选):表示选中哪个表单(Excel 通常包含多个表单),默认值为 0(也就是选中第 1 个表单)。
read_excel() 函数会返回一个 DataFrame 对象,也就是会将 Excel 文件的数据转换成一个 DataFrame 对象。
首先在当前项目下的 data 文件夹中新建一个名为 fruits.xlsx 的文件,项目结构如下图 1 所示。然后往 fruits.xlsx 文件中添加数据,如下图 2 所示。


示例 1:pandas 读取 Excel
import pandas as pd
df = pd.read_excel('data/fruits.xlsx')
pd.set_option('display.unicode.east_asian_width', True)
print(df)运行结果如下。
id name type season price
0 1 葡萄 浆果 夏 27.3
1 2 柿子 浆果 秋 6.4
2 3 橘子 浆果 秋 11.9
3 4 山竹 仁果 夏 40.0
4 5 苹果 仁果 秋 12.6使用 openpyxl 库读取 Excel
在 Python 中,我们还可以使用 openpyxl 库来读取 Excel 文件。由于 openpyxl 是第三方模块,在使用之前需要执行以下命令安装它(如果前面已经安装了,就不需要再另外安装)。
pip install openpyxl提示: openpyxl 库操作 Excel 文件会比较麻烦,更推荐使用 pandas 库来操作。
1. Workbook 对象
在 Python 中,我们可以使用 openpyxl 库的 load_workbook() 函数来获取到一个 Workbook 对象,该对象代表的就是整个 Excel 文档。
语法:
import openpyxl
wb = openpyxl.load_workbook(路径)说明:
load_workbook() 函数接收一个路径作为参数,该方法返回的是一个 Workbook 对象,该对象代表的就是一个 Excel 文档,类似于 File 对象代表一个文本文件。
Workbook 对象提供了很多属性,常见的如下表所示。
| 属性 | 说明 |
|---|---|
| sheetnames | 获取所有表名,返回的是一个列表 |
| active | 获取当前活动表,返回的是一个 Worksheet 对象 |
示例 2:openpyxl 读取 Excel
import openpyxl
wb = openpyxl.load_workbook('data/fruits.xlsx')
print(wb)
# 获取所有表名
sheets = wb.sheetnames
print(sheets)
# 获取当前活动表
sheet = wb.active
print(sheet.title)运行结果如下。
<openpyxl.workbook.workbook.Workbook object at 0x000001DD77D1E7D0>
['Sheet1']
Sheet1分析:
wb.sheetnames 获取的是所有表名,它返回的是一个列表。wb.active 获取的是当前的活动表。所谓的 “活动表”,指的是在 Excel 中打开时出现的工作表。还可以使用 wb['表名'] 的方式来获取某一张表,比如:sheet = wb['Sheet1']。
2. Worksheet 对象
wb.active 和 wb['表名'] 这两种方式返回的都是一个 Worksheet 对象,一个 Worksheet 对象代表一张表。
Worksheet 对象的属性比较多,常用的如下表所示。
| 属性 | 说明 |
|---|---|
| title | 标题 |
| max_row | 行数 |
| max_column | 列数 |
| rows | 按行获取单元格(生成器) |
| columns | 按列获取单元格(生成器) |
示例 3:openpyxl 获取行数和列数
import openpyxl
wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active
print('行数:', sheet.max_row)
print('列数:' , sheet.max_column)运行结果如下。
行数:6
列数:5示例 4:openpyxl 操作行或列
import openpyxl
wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active
for rows in sheet['B2': 'B6']:
for cell in rows:
print(cell.value)运行结果如下。
葡萄
柿子
橘子
山竹
苹果分析:
sheet['B2': 'B6'] 表示获取 B 列中的第 2 行到第 6 行。“B2” 中的 “B” 表示哪一列,“2” 表示哪一行。打开 Excel 文件,也可以很直观地看出来,如下图所示。

3. Cell 对象
每一个 Worksheet 对象代表的就是一张表,而每一个 Cell 对象代表的是一个单元格。拿到了 Worksheet 对象后,接下来就可以使用它来获取 Cell 对象了。获取某一个单元格有两种方式。
语法:
sheet['单元格名']
sheet.cell(column=m, row=n)说明:
“单元格名” 指的是 “列” 和 “行” 组成的名字,比如 A1、B1、C1 等。cell() 是 Worksheet 对象的一个方法,它可以接收 column 和 row 两个参数。column 用于设置列号,row 用于设置行号。
不管是 sheet[] 方式,还是 sheet.cell() 方法,都会返回一个 Cell 对象。Cell 对象常见的属性如下表所示。
| 属性 | 说明 |
|---|---|
| value | 单元格的值 |
| column | 单元格所在的列,如 “A” |
| row | 单元格所在的行,如 “1” |
| coordinate | 单元格的位置,如 “A1” |
示例 5:使用 sheet[] 方式
import openpyxl
wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active
cell = sheet['B3']
print('单元格:', cell.coordinate)
print('值:', cell.value)运行结果如下。
单元格:B3
值:柿子分析:
sheet['B3'] 表示获取第 2 列第 3 行的单元格。对于上面示例来说,下面两种方式是等价的。
# 方式 1
cell = sheet['B3']
# 方式 2
cell = sheet.cell(column=2, row=3) 示例 6:openpyxl 获取某一列所有单元格
import openpyxl
wb = openpyxl.load_workbook('data/fruits.xlsx')
sheet = wb.active
for i in range(2, sheet.max_row + 1):
print(sheet.cell(column=2, row=i).value)运行结果如下。
葡萄
柿子
橘子
山竹
苹果分析:
最后,总结一下 openpyxl 对 Excel 文件的操作,主要有以下 2 点。
- 一个 Workbook 对象代表一个 Excel 文档,一个 Worksheet 对象代表一张表,而一个 Cell 对象代表一个单元格。
- 一般是通过 Workbook 对象来找到 Worksheet 对象,然后通过 Worksheet 对象来找到 Cell 对象。这个就像先找到爷爷,再通过爷爷找到爸爸,最后通过爸爸找到儿子。
