ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python 读取excel数据第三方库 xlrd的基本使用及合并单元格处理

2020-07-04 15:06:54  阅读:258  来源: 互联网

标签:index sheet python 单元格 excel col row


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)

 

 

 

 

 

 

 





标签:index,sheet,python,单元格,excel,col,row
来源: https://www.cnblogs.com/ceshixiaowen/p/13234922.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有