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

如何用Openpyxl的iter_rows为指定列批量赋值并匹配列行数?

解决Openpyxl赋值列与指定列行数匹配的问题

让我帮你排查代码里的问题,同时实现你需要的功能——给第7列(G列)赋值,且行数和第6列(F列)的有效行数保持一致:

原代码的核心问题

  • 单元格对象误用为行号:你在循环里写了ws.cell(row=cell, column=7),这里的cell是openpyxl的单元格对象,不是行号数值,直接这么用会触发类型错误。其实你已经在遍历G列的单元格了,直接给cell.value = 'BMA'就行。
  • 未匹配第6列的有效行数:原代码用ws.max_row取的是整个工作表的最大行,但如果第6列最后几行是空的,这会导致G列多赋值,不符合你的需求。我们需要单独找到第6列最后一个有数据的行号。
  • 潜在风险:用openpyxl保存CSV:Openpyxl专门处理Excel的.xlsx/.xlsm格式,直接保存为.csv可能出现格式错乱、编码异常等问题,更推荐先存为xlsx,再按需转CSV。

修正后的代码(保存为xlsx,推荐)

import openpyxl

# 加载目标工作簿和工作表
wb = openpyxl.load_workbook(filename=r'C:\Users\.spyder-py3\data\BMA.xlsx')
ws = wb.worksheets[0]

# 找到第6列(F列)的最后一个有效行号
last_valid_row = ws.max_row
# 从下往上遍历,确保找到的是F列真正有数据的最后一行
for row in range(ws.max_row, 0, -1):
    if ws.cell(row=row, column=6).value is not None:
        last_valid_row = row
        break

# 给第7列(G列)对应行赋值
for row_num in range(ws.min_row, last_valid_row + 1):
    ws.cell(row=row_num, column=7).value = 'BMA'

# 保存修改后的Excel文件
wb.save(r'C:\Users\.spyder-py3\data\BMA_updated.xlsx')
wb.close()

如果需要保存为CSV格式

如果确实需要输出CSV,可以借助pandas快速转换(需要先安装依赖:pip install pandas openpyxl):

import pandas as pd

# 读取修改后的xlsx文件
df = pd.read_excel(r'C:\Users\.spyder-py3\data\BMA_updated.xlsx')
# 保存为CSV,避免中文乱码用utf-8-sig编码
df.to_csv(r'C:\Users\.spyder-py3\data\BMA_updated.csv', index=False, encoding='utf-8-sig')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:28:16