xlrd 简介:

xlrd是python支持的读取excel的第三方库,功能十分强大,今天我们一起来学习下吧!

xlrd 的安装:pip install xlrd 

 

xlrd的基本操作:

首先我们创建一个测试的excel:

python 判断合并单元格合并了几个 python处理合并单元格_python 判断合并单元格合并了几个

 

 

创建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的高级用法-合并单元格处理:

我们日常使用,常常会有合并单元格的场景:

python 判断合并单元格合并了几个 python处理合并单元格_数据_02

 

 

 使用基本方法 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)