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

最近使用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值