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

使用openpyxl给指定列每行写入VLOOKUP公式 取值返回None求助

问题原因
  • 赋值对象错误:循环中获取的eachrow就是B列对应的单个单元格对象,你代码中错误地给openpyxl.cell这个类的全局属性赋值,完全没有绑定到实际要修改的单元格上,所以单元格的值从来没有被更新过,自然print(ws2['B2'].value)会返回None。
  • 公式占位符未替换:公式里的{0}没有替换为当前单元格对应的行号,即使赋值成功公式也无法正常执行。
  • 缺少保存步骤:修改仅保存在内存中,没有写入本地文件,下次打开文件修改也会丢失。
解决方法

修正后的代码如下:

import openpyxl

path = 'test.xlsx'
wb = openpyxl.load_workbook(path)
ws2 = wb['Sheet2']

# 遍历B列单元格
for eachcell in ws2['B']:
    # 如果B1是表头不需要写公式,可加下面这行跳过
    # if eachcell.row == 1: continue
    # 给当前单元格的value属性赋值,替换行号占位符
    eachcell.value = f'=VLOOKUP(B{eachcell.row},Sheet1!A:A,1,0)'

# 打印验证修改结果
print(ws2['B2'].value)
# 必须调用save方法将内存中的修改写入本地文件
wb.save('test.xlsx')

核心修改点:

  • 将赋值对象从openpyxl.cell.value改为遍历得到的单元格实例的eachcell.value,直接修改对应单元格的内容
  • 用单元格自带的row属性获取当前行号,填充到公式的占位符位置
  • 新增wb.save()方法保存修改,持久化到本地文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:45:05