You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:24:57