获取指定起止索引内所有的Excel单元格索引
李俊才
【调用其他函数】
【函数说明】
定义函数的两个形参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
【调用实例】
内容仅供参考,如需使用请注明出处。