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

如何用openpyxl为Excel指定列每行单元格分配独立变量?

解决Excel单元格数据分配到字典键时被全部覆盖的问题

问题描述

需要遍历Excel某特定列的指定行范围(第13到33行,第8列),将每行单元格的数据分配给字典中独立的mac1、mac2...macN键。当前使用三层循环实现,但所有字典键最终都被最后一行单元格的值覆盖,无法对应到各自的行数据。

原代码

# Iterates through rows in the MAC Address column
for row in ws.iter_rows(min_row=13, min_col=8, max_row=33, max_col=8):
    for cell in row:

        #Creates a dictionary to assign a variable for each cell
        d = {}

        #This loop is supposed to assign a new variable for each cell's value
        for i in range(1,14):  # for looping
            d["mac{0}".format(i)] = cell.value

错误输出

{'mac1': '00:00:00:00:00:00', 'mac2': '00:00:00:00:00:00', 'mac3': '00:00:00:00:00:00'...}

问题原因

原代码逻辑存在两处关键错误:

  1. 字典重复初始化:每次遍历单元格时都重新创建空字典d,之前的赋值结果被完全覆盖。
  2. 键值重复赋值:内层循环会把所有mac1到mac13键都赋值为当前单元格的值,导致每个单元格处理完后,字典里所有键都是同一个值,最终仅保留最后一个单元格的内容。

修正方案

方案一:遍历行时同步赋值对应键

通过enumerate获取行的索引(从1开始),直接为每个macN键分配对应行的单元格值:

# 先初始化空字典
d = {}

# 遍历指定范围的行,同时获取从1开始的索引
for idx, row in enumerate(ws.iter_rows(min_row=13, min_col=8, max_row=33, max_col=8), start=1):
    # 单列数据,取row中的第一个单元格值
    cell_value = row[0].value
    # 给对应索引的mac键赋值
    d[f"mac{idx}"] = cell_value

方案二:先收集所有值再生成字典

用列表推导式先提取所有目标单元格的值,再通过字典推导式生成键值对,逻辑更简洁:

# 提取指定范围的所有单元格值
mac_values = [row[0].value for row in ws.iter_rows(min_row=13, min_col=8, max_row=33, max_col=8)]

# 生成对应的mac字典,索引从1开始
d = {f"mac{i+1}": val for i, val in enumerate(mac_values)}

两种方案都能实现:第13行对应mac1,第14行对应mac2,以此类推,直到第33行对应mac21(因为33-13+1=21行数据)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:10:52