python3读取Excel(包含合并单元格)

您所在的位置:网站首页 pandas如何合并单元格 python3读取Excel(包含合并单元格)

python3读取Excel(包含合并单元格)

2023-09-20 20:30| 来源: 网络整理| 查看: 265

概述

使用python3读取Excel内容,包含读取纵向合并单元格和横向合并单元格。

pyexcel.png

其中,在D2、D3、D4单元格为合并单元格,我们希望第3行和第4行都可以用“诸葛亮”这个值,该怎样读取呢? 请往下读

环境 python3 xlrd==1.0.0 思路 从左往右,一格一格读取单元格 如果碰到某个单元格是合并单元格,则进行解析 获取sheet页中所有的合并单元格坐标信息 判断要读取的该单元格坐标,是否在合并单元格坐标内 如果在,读取该合并单元格的值并返回 把读取的值,设置到实体类中 对实体类进行操作,录入数据库或者其他处理 难点解析 获取所有的合并单元格

使用sheerged_cells可以获取页面中所有的合并单元格坐标。类似:

[(4, 5, 2, 4), (5, 6, 2, 4), (1, 4, 3, 4)]

格式的数据,(4, 5, 2, 4)的含义为:行 从下标4开始,到下标5(不包含) 列 从下标2开始,到下标4(不包含),为合并单元格,即C5-有勇有谋,单骑救主 这个合并单元格

判断某一格是否属于合并单元格,如果是,则返回合并单元格的值 def get_merged_cells_value(sheet, row_index, col_index): """ 先判断给定的单元格,是否属于合并单元格; 如果是合并单元格,就返回合并单元格的内容 :return: """ merged = get_merged_cells(sheet) 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) # print('该单元格[%d,%d]属于合并单元格,值为[%s]' % (row_index, col_index, cell_value)) return cell_value break return None 完整代码 # -*- coding: utf-8 -*- import xlrd import uuid class Student(): def __init__(self, id, **kw): self.id = id for k, v in kw.items(): setattr(self, k, v) def __str__(self): return '%s(id=%s,column1=%s,column2=%s,column3=%s,column4=%s)' \ % ( self.__class__.__name__, self.id, self.column1, self.column2, self.column3, self.column4) def read_excel(): # 打开文件 workbook = xlrd.open_workbook(r'py.xlsx') # 获取所有sheet print('打印所有sheet:', workbook.sheet_names()) sheet2 = workbook.sheet_by_index(0) # sheet索引从0开始 rows_num = sheet2.nrows cols_num = sheet2.ncols for r in range(rows_num): # 一行数据的实体类 entity_dict = {} for c in range(cols_num): cell_value = sheet2.row_values(r)[c] # print('第%d行第%d列的值:[%s]' % (r, c, sheet2.row_values(r)[c])) if (cell_value is None or cell_value == ''): cell_value = (get_merged_cells_value(sheet2, r, c)) # 构建Entity the_key = 'column' + str(c + 1); # 动态设置各属性值 entity_dict[the_key] = cell_value entity_dict['id'] = getUUID() stu = Student(**entity_dict) print(stu) def get_merged_cells(sheet): """ 获取所有的合并单元格,格式如下: [(4, 5, 2, 4), (5, 6, 2, 4), (1, 4, 3, 4)] (4, 5, 2, 4) 的含义为:行 从下标4开始,到下标5(不包含) 列 从下标2开始,到下标4(不包含),为合并单元格 :param sheet: :return: """ return sheerged_cells def get_merged_cells_value(sheet, row_index, col_index): """ 先判断给定的单元格,是否属于合并单元格; 如果是合并单元格,就返回合并单元格的内容 :return: """ merged = get_merged_cells(sheet) 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) # print('该单元格[%d,%d]属于合并单元格,值为[%s]' % (row_index, col_index, cell_value)) return cell_value break return None def getUUID(): return uuid.uuid1().hex if __name__ == "__main__": read_excel() 执行结果 result.png Git 地址

learn_python

特别鸣谢

python中使用xlrd、xlwt操作excel表格详解



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3