openpyxl处理.xlsx合并单元格数据
一、之前学过xlrd处理.xls格式的excel数据,想着excel使用.xlsx格式比较多,所以用openpyxl做一个处理.xlsx格式的excel数据(仅供参考)
二、思路:(我这里只展示一个表单的情况)
1.读取excel文件
2.获取表单里面单元格数据(包含普通单元格、合并单元格)
3.将单元格数据用字典形式存在列表中
三、实践
1.读取excel文件:
1.1、首先下载第三方库openpyxl,进入doc使用命令pip install openpyxl
1.2、代码中引用openpyxl
import openpyxl
1.3、读取excel文件,定义文件对象
data = openpyxl.load_workbook("压测手机号.xlsx")
1.4、上面定义文件对象后就相当于进入文件了,进了文件后我们要知道文件里的表单,所以定义文件的表单对象
sheet = data['Sheet1'] # Sheet1为表单名
1.5、定义了表单对象后,就可以进行下一步获取表单中单元格内容了
2.获取表单里面单元格数据
2.1、获取指定单元格数据(row表示行,column表示列):
a = sheet.cell(row=3, column=1).value
print(a)
2.2、单元格有合并单元格的情况,所以需要能够获取合并单元格的数据
# 获取合并单元格需要用到下面几个
print(sheet.max_row) # TODO 获取最大行数
print(sheet.min_row) # TODO 获取最小行数
print(sheet.max_column) # TODO 获取最大列数
print(sheet.min_column) # TODO 获取最小列数
openpyxl中使用merged_cells可以查询出所有的合并单元格行和列,得到的是下面的A2:A3 A5:A6 B5:B6 C5:C6
merge_lists = sheet.merged_cells
A2:A3 A5:A6 B5:B6 C5:C6
然后处理合并单元格,得到合并单元格的行列坐标,我这里做了个方法,整体代码如下
def merge():
# TODO 查询该sheet表单所有合并单元格
merge_lists = sheet.merged_cells
print(merge_lists)
merge_all_list = [] # 接收最终内容并返回
# TODO 遍历合并单元格
for merge_list in merge_lists:
# TODO 获取单个合并单元格的起始行(row_min)终止行(row_max)和起始列(col_min)终止列(col_max)
row_min, row_max, col_min, col_max = merge_list.min_row, merge_list.max_row, merge_list.min_col, merge_list.max_col
# 这里判断如果合并单元格起始、终止的行和列都不相等,说明合并单元格既合并了行又合并了列,两个for循环依次取出行列位置分别存在x,y中
if (row_min != row_max and col_min != col_max):
row_col = [(x, y) for x in range(row_min, row_max+1) for y