使用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
相关产品推荐
相关产品推荐

