文章目录
- 前言
- 一、安装xlrd库
- 二、操作Excel文件
-
- [1. 打开Execl文件并读取内容](#1. 打开Execl文件并读取内容)
- [2. 获取指定工作表](#2. 获取指定工作表)
- [3. 操作指定行](#3. 操作指定行)
- [4. 操作指定列](#4. 操作指定列)
-
- [4.1 `ncols`成员变量](#4.1
ncols成员变量) - [4.2 `col`函数](#4.2
col函数) - [4.3 `col_silce`函数](#4.3
col_silce函数) - [4.3 `col_types`函数](#4.3
col_types函数) - [4.4 `col_values`函数](#4.4
col_values函数)
- [4.1 `ncols`成员变量](#4.1
- [5. 操作指定单元格](#5. 操作指定单元格)
-
- [5.1 `cell`函数](#5.1
cell函数) - [5.2 `cell_type`函数](#5.2
cell_type函数) - [5.3 `cell_value`函数](#5.3
cell_value函数)
- [5.1 `cell`函数](#5.1
- 三、使用示例
- 总结
前言
本文主要介绍了如何使用Python程序操作excel。
一、安装xlrd库
xlrd是Python处理Excel表格数据的一个模块,能够对Excel中的数据进行读取。
安装命令为
python
pip install xlrd==1.2.0
注意:由于最新版xlrd删除了对xlsx格式文件的支持,而我们接下来要以读取xlsx文件来演示xlrd模块,因此在安装时指明了版本号(不指定版本号,会默认安装最新版本)。
二、操作Excel文件
1. 打开Execl文件并读取内容
open_workbook函数
使用xlrd模块中的open_workbook函数可以打开指定的Execl文件。
python
import xlrd
data = xlrd.open_workbook('filedir/file.xlsx')
open_workbook函数返回的是一个book对象,该对象代表的是被打开的Excel文件。
如果要打开的xlsx文件和当前的Python程序在同一目录下,我们可以通过如下方式获取Excel文件的路径:
- 使用os.path模块中的abspath函数获取到Python程序所在的绝对路径;
- 再使用os.path模块中的dirname函数获取到Python程序所在的目录的绝对路径;
- 最后使用os.path模块中的join函数将Python程序所在的目录路径与Excel文件的文件名拼接起来,即可得到Excel文件的路径。
在需要打开Excel文件时,将获得的路径传入open_workbook函数。
python
import xlrd
import os
file_path = os.path.abspath(__file__)
base_path = os.path.dirname(file_path)
test_path = os.path.join(file_path, 'test.xlsx')
data = xlrd.open_workbook(test_path)
2. 获取指定工作表
工作表是指Excel文件中的Sheet,一个Sheet就是一个工作表。
获取某个Sheet,是指获取某个Excel文件的Sheet,因此获取Sheet的函数都是book对象的成员函数,得用book对象来调用。
sheets函数
sheets函数可以获取Book对象中所有的工作表。这些工作表是以列表的形式进行返回的,可以通过索引的方式来获取指定工作表。
python
table = data.sheets()[0] # 获取Sheet1工作表
注意:
Sheet1的索引为0,Sheet2的索引为1,以此类推。
sheet_by_index函数
sheet_by_index函数可以通过索引的方式来获取指定sheet表格。
python
table = data.sheet_by_index(1) # 获取Sheet2工作表
Sheet_by_index函数所用的索引和列表的索引规则相同。
sheet_by_name函数
sheet_by_name函数可以通过sheet表格名来获取指定sheet表格。
python
table = data.sheet_by_name('Sheet1') # 获取Sheet1工作表
sheet_names函数
sheet_names函数可以获取Book对象中所有工作表的名字,这些名字会以列表的形式返回。
python
print(data.sheet_names()) # [Sheet1, Sheet2, Sheet3]
sheet_loaded函数
sheet_loaded函数可以查询某个工作表是否导入完毕。
python
print(data.sheet_loaded(0)) # 检查Sheet1工作表是否导入完毕
print(data.sheet_loaded('Sheet1')) # 检查Sheet1工作表是否导入完毕
注意:
Sheet_loaded函数检查工作表是否导入完毕时,支持传入工作表索引,也支持传入工作表名。
3. 操作指定行
操作指定行是指操作某个工作表的行,因此操作指定行的这些函数都是Sheet对象的成员函数,需要使用Sheet对象来进行调用。
nrows成员变量
nrows成员变量可以获取工作表中的行数。
python
nrows = table.nrows # 获取工作表中的行数
row函数
row函数可以获取指定行的所有单元格对象(以列表形式返回)。
python
print(table.row(0)) # 获取第0行中所有单元格对象组成的列表
row_slice函数
row_slice函数可以获取指定行的指定起始位置到指定终止位置的单元格对象(以列表形式返回)。
python
print(table.row_slice(0, start_colx=0, end_colx=None)) #获取第0行中所有单元格对象组成的列表
注意:
- start_colx参数,表示从指定行的第start_colx列的单元格开始获取,默认值为0(即从第0列开始获取);
- end_colx参数,表示在指定行中要被获取的最后一个单元格的下一个单元格的下标,默认值为None(即获取到最后一个单元格)。
row_types函数
row_types函数可以获取指定行的所有单元格对象的数据类型(以列表的形式返回)。
python
print(table.row_types(0, start_colx=0, end_colx=None)) # 获取第0行所有单元格的数据类型(以列表的形式返回)
注意:
Python读取Excel单元格数据的类型有以下几种,row_types函数返回的是类型的对应值。
| 类型 | 对应值 |
|---|---|
| XL_CELL_EMPTY | 0 |
| XL_CELL_TEXT | 1 |
| XL_CELL_NUMBER | 2 |
| XL_CELL_DATE | 3 |
| XL_CELL_BOOLEAN | 4 |
| XL_CELL_ERROR | 5 |
| XL_CELL_BLANK | 6 |
row_values函数
row_valuse函数可以获取指定行的所有单元格对象的数据值(以列表的形式返回)。
python
print(table.row_values(0, start_colx=0, end_colx=None)) # 获取第0行所有单元格数据的值(以列表形式返回)
row_len函数
row_len函数可以获取指定行的有效单元格对象个数。
python
print(table.row_len(o)) # 获取第0行有效单元格对象的个数
4. 操作指定列
操作指定列是指操作某个工作表的列,因此操作指定列的函数都是Sheet对象的成员函数,需要使用Sheet对象来调用。
4.1 ncols成员变量
ncols成员变量可以获取工作表的列数。
python
print(table.ncols) # 获取工作表的列数
4.2 col函数
col函数可以获取工作表中指定列的所有单元格对象(以列表形式返回)。
python
print(table.col(0)) # 获取第0列的所有单元格对象(以列表形式返回)
4.3 col_silce函数
col_silce函数可以获取工作表中指定列指定起始行start_rowx到指定结束行end_rowx之间(左闭右开)的所有单元格对象(以列表形式返回)。
python
print(table.col_silce(0, start_rowx=0, end_rowx=None)) # 获取第0列的所有单元格对象(以列表的形式返回)
4.3 col_types函数
col_types函数可以获取工作表中指定列指定起始行start_rowx到指定结束行end_rowx之间(左闭右开)的所有单元格对象的数据类型(以列表形式返回)。
python
print(table.col_types(0, start_rowx=0, end_rowx=None)) # 获取第0列的所有单元格对象的数据类型(以列表的形式返回)
4.4 col_values函数
col_values函数可以获取工作表中指定列起始行start_rowx到结束行end_rowx之间(左闭右开)的所有单元格对象的数据值(以列表形式返回)。
python
print(table.col_values(0, start_rowx=0, end_rowx=None)) # 获取第0列的所有单元格对象的值(以列表的形式返回)
5. 操作指定单元格
操作指定单元格是指操作某个Excel工作表中的单元格,因此操作单元格的函数是Sheet对象的成员函数,需要使用Sheet对象进行调用。
5.1 cell函数
使用cell函数可以获取指定单元格的对象。
python
print(table.cell(0, 1)) # 获取第0行第1列的单元格对象
5.2 cell_type函数
使用cell_type函数可以获取指定单元格对象的数据类型。
python
print(table.cell_type(0, 1)) # 获取第0行第1列的单元格对象的数据类型
5.3 cell_value函数
使用cell_value函数可以获取指定单元格对象的数据值。
python
print(table.cell_value(0, 1)) # 获取第0行第1列的单元格对象的数据值
三、使用示例
根据学生成绩单.xlsx,求出3班数学成绩的平均分,工作表数据如下:

步骤:
-
使用open_workbook函数打开该Excel文件;
-
使用Sheet_by_index获取Sheet1工作表;
-
使用nrows函数获取Sheet1工作表的行数;
-
使用for循环遍历Sheet1工作表的每一行,通过cell_value函数获取指定行第1列的数据值,判断是否为3班。如果是3班的,则使用row_values函数获取指定行第3行的数据值并添加到total,并使用count统计3班的学生个数;
-
表格遍历结束后,用total/count就能得到3班学生的数学成绩的平均分。
python
import xlrd
import os
#打开Execl文件读取
file_path = os.path.abspath(__file__)
base_path = os.path.dirname(file_path)
test_file = os.path.join(base_path, '学生成绩单.xlsx')
with xlrd.open_workbook(test_file) as data:
#获取指定工作表
table = data.sheet_by_index(0)
#求三班数学成绩平均分
nrows = table.nrows
total = 0
count = 1
for i in range(1, nrows):
if int(table.cell_value(i, 1)) == 3:
count += 1
total += int(table.cell_value(i, 3))
print(f'三班数学成绩平均分为:{total/count}')
运行结果如下:

总结
以上就是今天要讲的内容,本文介绍了如何使用Python代码来对Excel文件进行操作。本文作者目前也是正在学习Python相关的知识,如果文章中的内容有错误或者不严谨的部分,欢迎大家在评论区指出,也欢迎大家在评论区提问、交流。
最后,如果本篇文章对你有所启发的话,希望可以多多支持作者,谢谢大家!