ython 读取excel合并单元格 并将合并单元格的数据填充 代码如下:
#找出合并单元格的数据 full_file_path指传入的表格的路径
def enter(self,full_file_path):
try:
data = xlrd.open_workbook(full_file_path);
table = data.sheets()[0]
'''获取合并单元格的数据[(0,5,0,1),(6,10,0,1)] 格式为列表下多个元组 一个元组代表一个起合并单元格
(a,b,c,d) a为起始行 b为结束行 c为起始列 d为结束列 左闭右开原则'''
lists=table.merged_cells;
except Exception as ex:
print(ex)
mergeJson={}; #合并单元格与该单元格的数据
nrows = table.nrows #行数
#找出合并单元格 并找出合并单元格的值 以键值的方式存储 元组为键 该合并单元格的值为值
for i in range(1,nrows):
rowValues= table.row_values(i) #某一行数据
event = {}
for j in range(0,len(rowValues)): #某一行中列的数据
for mer in lists: #遍历合并单元格的列表 mer为元组
if i>=mer[0] and i<mer[1] and j>=mer[2] and j<mer[3] : #判断是否是合并行
#处理合并行
if rowValues[j] != "" : #不为空的合并值
mergeJson[mer]=rowValues[j];
''' 将合并的单元格和数据传过来 处理数据 此处的处理逻辑是 将合并的单元格的位置确定 判断读取的当前单元格在不在合并单元格内 在的话 就把为空的单元格的值填充为合并单元格的值'''
def dealData(self,data,mergeJson):
bulk = []
table = data.sheets()[0]
lists=table.merged_cells;
nrows = table.nrows #行数
#解析数据
try :
for i in range(1,nrows):
rowValues= table.row_values(i) #某一行数据
event = {}
for j in range(0,len(rowValues)): #某一行中列的数据
if mergeJson:
for tuplerc in mergeJson: #data为字典 key 为元组 value 为该合并单元格的值
if i>=tuplerc[0] and i<tuplerc[1] and j>=tuplerc[2] and j<tuplerc[3] : #判断是否是合并行
#处理合并行
if rowValues[j] == "" : #不为空的合并值
rowValues[j]= mergeJson[tuplerc];
else :
event[fields_names[j]]=value;
else :
event[fields_names[j]] =rowValues[j]
bulk.append(event)
except Exception as ex:
print(ex)
print (bulk);