Python Openpyxl单元格递增赋值异常问题求助
Python - Openpyxl - 单元格递增赋值
我已尝试4种代码实现需求,也查阅了相关问题,但仍未解决。代码如下:
cc2 = 2 cc2i = 2 while cc2 < 5000: while cc2i < 5000: ws['c{}'.format(int(cc2))] = ArrayFormula("c{}:c{}".format(int(cc2), 5000), "=upper(Input!f{}".format(int(cc2i))+")") cc2 += 5 cc2i += 1` #or cc2 = 2 cc2i = 2 while cc2 < 5000: while cc2i < 5000: ws['c{}'.format(str(cc2))] = ArrayFormula("c{}:c{}".format(str(cc2), 5000), "=upper(Input!f{}".format(str(cc2i))+")") cc2 += 5 cc2i += 1 #or for cc2 in range(2, 5000, 5): for cc2i in range(2, 5000, 1) ws['c{}'.format(int(cc2))] = ArrayFormula("c{}:c{}".format(int(cc2), 5000), "=upper(Input!f{}".format(int(cc2i))+")") #or for cc2 in range(2, 5000, 5): for cc2i in range(2, 5000, 1) ws['c{}'.format(str(cc2))] = ArrayFormula("c{}:c{}".format(str(cc2), 5000), "=upper(Input!f{}".format(str(cc2i))+")")
我期望实现的效果为:
ws['c2'] = '=UPPER(Input!f2)' ws['c7'] = '=UPPER(Input!f3)' ws['c12'] = '=UPPER(Input!f4)' # 以此类推
但实际运行结果为:
ws['c2'] = '=UPPER(Input!f2)' ws['c3'] = '=UPPER(Input!f2)' ws['c4'] = '=UPPER(Input!f2)' # 以此类推
问题原因
你用了嵌套循环,内层循环会一次性把cc2i从2遍历到5000,同时cc2持续加5直到超出范围,导致所有cc2对应的单元格都被赋值为cc2i=2时的公式,后续的cc2i递增无法对应到新的cc2位置。你需要的是两个变量同步递增,用单层循环即可。
修正后的代码
方法一:while循环
cc2 = 2 cc2i = 2 while cc2 < 5000: # 单个单元格无需使用ArrayFormula,直接赋值公式即可 ws[f'c{cc2}'] = f'=UPPER(Input!f{cc2i})' cc2 += 5 cc2i += 1
方法二:for循环(更简洁)
# 计算总循环次数:从2到5000步长5,共(5000-2)//5 +1 次 for idx in range((5000 - 2) // 5 + 1): cc2 = 2 + idx * 5 cc2i = 2 + idx ws[f'c{cc2}'] = f'=UPPER(Input!f{cc2i})'
内容的提问来源于stack exchange,提问作者Zestco Seahan
相关产品推荐
相关产品推荐

