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

使用Python openpyxl给Excel列批量写入带递增引用的VLOOKUP公式

openpyxl写入VLOOKUP公式行号不递增的解决方法

你的代码核心问题是公式字符串的拼接逻辑放在了循环外,仅在初始化时生成了一次引用N2的固定公式,后续循环中仅更新了part2变量,没有重新生成新的公式字符串,所以所有单元格写入的都是同一个固定公式。


修正方案1:调整公式拼接位置

仅需要把公式拼接逻辑移入循环内即可,适配你原本的写法:

"""Add formula columns"""
from openpyxl import load_workbook

# 加载工作簿
book = load_workbook('export1.xlsx')
# 指定工作表
sheet = book['RAW DATA']

part1 = "=VLOOKUP(N"
part2 = 2
part3 = ",Matrix!L:M,2,FALSE)"

for cell in sheet['V']:
    # 每次循环重新拼接当前行的公式
    cell.value = part1 + str(part2) + part3
    part2 += 1

# 设置列名,会覆盖V1单元格之前写入的公式
sheet['V1'] = 'New Column'

# 保存关闭
book.save('testing.xlsx')
book.close()

修正方案2:直接使用单元格行号属性(更简洁)

openpyxl的单元格对象自带row属性,可以直接获取当前单元格的行号,不需要额外维护计数变量,代码更简洁不易出错:

"""Add formula columns"""
from openpyxl import load_workbook

book = load_workbook('export1.xlsx')
sheet = book['RAW DATA']

for cell in sheet['V']:
    # 直接取当前单元格行号拼接公式
    cell.value = f'=VLOOKUP(N{cell.row},Matrix!L:M,2,FALSE)'

sheet['V1'] = 'New Column'

book.save('testing.xlsx')
book.close()

优化建议(可选)

如果你的表格只有部分行有数据,不想给整列空单元格都写入公式,可以只遍历有效数据行,减少无效操作:

# 仅从第2行到最后一行有数据的行写入公式
for row in range(2, sheet.max_row + 1):
    sheet[f'V{row}'].value = f'=VLOOKUP(N{row},Matrix!L:M,2,FALSE)'

内容的提问来源于stack exchange,提问作者frito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:27:02