如何判断一个单元格是否为合并单元格

最近使用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  #  关闭文件

测试样本:

如何判断一个单元格是否为合并单元格_第1张图片

测试结果:

如何判断一个单元格是否为合并单元格_第2张图片

如何判断一个单元格是否为合并单元格_第3张图片

 希望可以帮助大家,有更好的方法可以交流。

你可能感兴趣的:(Python,python)