获取指定起止索引内所有的Excel单元格索引

李俊才
邮箱:291148484@163.com

【调用其他函数】

  • Cell_A1to11(A1): 将任意范围的Excel索引表示转化为数字索引表示函数
    博文地址:https://editor.csdn.net/md/?articleId=110739034
  • Split_num_letters(A1): 将字符串中的数字与字母分离函数
    博文地址:https://editor.csdn.net/md/?articleId=110731266

【函数说明】

定义函数的两个形参C_begin与C_end分别代表起止的单元格。实际上在本函数中起始单元格C_begin与结束单元格C_end之间并没有什么本质区别,对于任意两个单元格(如C_begin = “A1”、C_begin = “B3”)都可以表示一个单元格范围(range),哪怕C_begin与C_end是同一个单元格(这是表示的范围内只包含一个单元格)。本函数要返回的内容就是所有这样的单元格的Excel索引值,我们把所有的这些值插入到一个列表,返回的形式就是一个包含了范围内所有这些单元格的列表。

李俊才手绘图片

我们可以发现,只要给出起止单元格,在这个范围内表示的区域永远是一个矩形区域。以(C2,E3)为例,如图所示:

李俊才手绘图片

在该范围内:r_min = 2,r _max = 3 行的范围为2到3
c_min = 3,c _max = 5 列的范围为3到5

因此在该范围内:包含的行序号为3、4、5
包含的列序号为2、3
这实际上是一个组合问题,由数学知识知该范围内一共有在这里插入图片描述
个单元格,只需要用循环以此插入列表即可。

【代码实现】

#将Excel单元格(Cell)索引范围对应的所有单元格插入一个列表并返回函数
def Excel_range_to_list(C_begin,C_end):
    Cells_list = []
    
    #先得到该范围行的限定位置,为数字范围值
    r_1 = Cell_A1to11(C_begin)[0]      #起始单元格的十进制数坐标的行
    r_2 = Cell_A1to11(C_end)[0]        #终止单元格的十进制数坐标的行
    #按照大小调整行起止的先后
    if r_1 >= r_2:
        r_max = r_1
        r_min = r_2
    else:
        r_max = r_2
        r_min = r_1

    #将范围内所有的行的数字序号插入行列表
    r_list = []
    while r_min <= r_max:
        r_list.append(r_min)
        r_min = r_min + 1

    #同理,再得到该范围列的限定位置,也被转化为数值范围值
    c_1 = Cell_A1to11(C_begin)[1]     #起始列
    c_2 = Cell_A1to11(C_end)[1]       #终止列
    #调整列大小顺序
    if c_1 >= c_2:
        c_max = c_1
        c_min = c_2
    else:
        c_max = c_2
        c_min = c_1

    #将范围内所有的列的数字序号插入列列表
    c_list = []
    while c_min <= c_max:
        c_list.append(c_min)
        c_min = c_min + 1
    
    #定义翻译字典,由数字索引对应Excel列的字母
    Decimal = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26]
    Hexadecimal = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
    
    E = dict(zip(Decimal,Hexadecimal))
    
    #将列中所有的数字翻译为对应的字母,但要注意,对于字母所表示的列,可能出现数字大于26的情况,即索引在“Z”后
    Excclist = []
    for num in c_list:
        # 调用我的特殊二十六进制转换函数
        x = num_to_Letter(num)
        Excclist.append(x)
    c_list = Excclist
    
    #使用for循环嵌套实现组合法
    for c in c_list:
        a_Cell = str(c)
        for r in r_list:
            rr = a_Cell
            rr = rr + str(r)
            Cells_list.append(rr)
    return Cells_list

【调用实例】
在这里插入图片描述
内容仅供参考,如需使用请注明出处。

Logo

一站式 AI 云服务平台

更多推荐