最近使用python在处理exce数据,需要提取里面单元格数据,整理后,填充到另外一个excel里面,碰到合并单元格问题——合并单元格的第一个行/列单元格有值,其他合并项都是空的'',取数据时,如果没法识别这项是否单元格,对数值为空,很难判断,本身为空,还是因为是合并单元格里面的其他成员单元导致的。为此编写了个小工具:已知单元格坐标,判断是否为合并单元格的成员。
import xlrd
def ismerged_cell(cell_row,cell_col,merged_list):#(rlow,rhigh,clow,chigh)
for (rlow,rhigh,clow,chigh) in merged_list:
if cell_row < rhigh and cell_row >= rlow:
if cell_col < chigh and cell_col >= clow:
print('\n单元格',(cell_row),cell_col,'(',(cell_row+1),chr(ord('A')+cell_col),')','是合并单元格')
return True
print('\n单元格',(cell_row),cell_col,'(',(cell_row+1),chr(ord('A')+cell_col),')','不是合并单元格')
return False
if __name__ == "__main__":
f = open("log.txt", "w") # 打开文件以便写入 add ,file = f
cell_row = input('输入单元格x坐标:')
cell_col = input('输入单元格y坐标:')
if cell_col.isalpha():#输入的是excel 的视图坐标
if cell_row == '0':
cell_row = int(cell_row)
else:
cell_row = int(cell_row) - 1
cell_col = ord(cell_col.upper()) - ord('A')
else: #输入的是excel 的数字坐标,各+1后,成视图坐标
cell_row = int(cell_row)
cell_col = int(cell_col)
print('\n输入的坐标对应excel上为:'+' '+str(cell_row+1)+' '+chr(ord('A')+cell_col))
workbook = xlrd.open_workbook(r'test.xls',formatting_info=True)
sheet1 = workbook.sheet_by_name('Sheet1')
merged_list = sheet1.merged_cells
#print(type(sheet1.cell)) # type:sheet1.cell.method
print('\n元组列表:\n',merged_list)#,file = f
merge_rlist = []
merge_clist = []
for (rlow,rhigh,clow,chigh) in merged_list:
merge_rlist.append([rlow,rhigh])
merge_clist.append([clow,chigh])
print('\n元组拆成row和col后:\n','row:',merge_rlist,'\n','col:',merge_clist)#,file = f
#print(merge_rlist[0][0],merge_rlist[0][1])
ismerged_cell(cell_row,cell_col,merged_list)
f.close # 关闭文件
测试样本:
测试结果:
希望可以帮助大家,有更好的方法可以交流。