xlrd 简介:
xlrd是python支持的读取excel的第三方库,功能十分强大,今天我们一起来学习下吧!
xlrd 的安装:pip install xlrd
xlrd的基本操作:
首先我们创建一个测试的excel:
创建python文件,具体操作excel
import xlrd
my_excel = xlrd.open_workbook("./test.xlsx") #读取excel文件,相当于打开excel
my_sheet = my_excel.sheet_by_name("Sheet1") #通过sheet页的名字,跳转sheet页
#获取数据的最大行数
max_row = my_sheet.nrows
#获取最大列数
max_col = my_sheet.ncols
#获取某一列的数据,
my_sheet.col_values(2) #返回第二列的列表
#获取某一行的数据
my_sheet.row_values(2) #返回第二列的列表
#获取某个坐标的值
my_sheet.cell_value(1,2)
上面代码的运行结果如下:
4
3
['sex', '男', '男', '女']
['李四', 20.0, '男']
男
xlrd还有很多方法这里就不一一列举,从上面我们已经可以用python操作excel文件了
xrld的高级用法-合并单元格处理:
我们日常使用,常常会有合并单元格的场景:
使用基本方法 my_sheet.cell_value(2,0),我们会发现取到的值为空,因为excel的机制,一班的值是(1,0),为了使合并单元格的值一致
我们需要用到merged_cells属性,它会返回所有合并单元格的坐标:[(1, 4, 0, 1)],所以我们的思路是,只要输入的坐标在这个范围内,我们
把(1,0)的值赋值给输入的坐标,这样就能达到我们的目的:合并单元格的值能正常获取:
row_index = 3 #输入合并单元格行数
col_index = 0 #输入合并单元格列数
merged = my_sheet.merged_cells
print(merged)
for(rlow, rhigh, clow, chigh) in merged: # 遍历表格中所有合并单元格位置信息
if (row_index >= rlow and row_index < rhigh): # 行坐标判断,判断输入的值 1=< row_index <4
if (col_index >= clow and col_index < chigh): # 列坐标判断 0 =<col_index < 1
# 如果满足条件,就把合并单元格第一个位置的值赋给其它合并单元格
cell_value = my_sheet.cell_value(rlow, clow)
print(cell_value)
如上代码就能让我们获取合并单元格的值都能获取到一班了,好了如果已经掌握,最好封装起来,这样以后用起来就方便了,如下:
def excel_merge_cell(self, row_index, col_index):
"""
根据输入坐标,输出合并单元格或者普通单元格的值
:param row_index int型,行数
:param col_index int型,列数
:return :返回对应坐标的值
"""
workbook = xlrd.open_workbook(excel_path)
sheet = workbook.sheet_by_name('Sheet1')
# merged_cells 获取当前表格所有合并单元格的位置信息 ,返回一个列
print(sheet.merged_cells)
merged = sheet.merged_cells
for (rlow, rhigh, clow, chigh) in merged: # 遍历表格中所有合并单元格位置信息
if (row_index >= rlow and row_index < rhigh): # 行坐标判断
if (col_index >= clow and col_index < chigh): # 列坐标判断
# 如果满足条件,就把合并单元格第一个位置的值赋给其它合并单元格
cell_value = sheet.cell_value(rlow, clow)
return "合并单元格数据第%d列,第%d行: %s" %(row_index, col_index,cell_value)
else:
cell_value =sheet.cell_value(row_index,col_index) #如果不是合并单元格,直接输出普通单元格的值
return "普通单元格数据第%d列,第%d行: %s" %(row_index, col_index,cell_value)