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

openpyxl如何根据嵌套字典批量更新Excel多行多列数据

问题背景

现有如下结构的嵌套字典:

aDictionary = {'Asset': {'Name': 'Max', 'Age': 28, 'Job': 'Nil'}, 'Parameter': {'Marks': 60, 'Height': 177, 'Weight': 76}}

需要将字典内容按三列结构写入Excel,每行分别存储一级键、二级键、对应值,目标格式如下:

A列(一级键)B列(二级键)C列(值)
AssetNameMax
AssetAge28
AssetJobNil
ParameterMarks60
ParameterHeight177
ParameterWeight76

使用openpyxl编写的初始代码运行结果不符合预期,初始代码如下:

from openpyxl import *

workbook=load_workbook('Empty.xlsx')
    worksheet= workbook['Sheet1']
    
    for m in range(1,7):
        for i in aDictionary:
            worksheet["A"+str(m)].value=i
            for j, k in aDictionary[i].items():
                worksheet["B"+str(m)].value=j
                worksheet["C"+str(m)].value=k
    workbook.save('Empty.xlsx')
错误原因
  • 存在语法缩进错误:加载工作簿后,操作工作表的代码块缩进层级错误,直接运行会抛出语法异常
  • 循环逻辑完全错误:最外层固定行号循环,内层遍历字典时会反复覆盖同一行的单元格内容,最终每行只会保留最后一次遍历到的键值,无法实现逐行写入的效果
修正后代码

核心逻辑是按字典遍历顺序逐行写入,每写完一组一级键+二级键+值的组合,行号自动向后偏移,不需要提前固定写入的行范围:

from openpyxl import load_workbook

aDictionary = {'Asset': {'Name': 'Max', 'Age': 28, 'Job': 'Nil'}, 'Parameter': {'Marks': 60, 'Height': 177, 'Weight': 76}}

wb = load_workbook('Empty.xlsx')
ws = wb['Sheet1']

row = 1
# 遍历一级键和对应的子字典
for top_key, sub_items in aDictionary.items():
    # 遍历子字典的所有键值对
    for sub_key, val in sub_items.items():
        ws[f'A{row}'].value = top_key
        ws[f'B{row}'].value = sub_key
        ws[f'C{row}'].value = val
        row += 1

wb.save('Empty.xlsx')

注意:运行代码前确保Empty.xlsx文件和脚本在同一目录下,且文件没有被其他程序占用,否则会报权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:03:20