openpyxl如何根据嵌套字典批量更新Excel多行多列数据
问题背景
现有如下结构的嵌套字典:
aDictionary = {'Asset': {'Name': 'Max', 'Age': 28, 'Job': 'Nil'}, 'Parameter': {'Marks': 60, 'Height': 177, 'Weight': 76}}
需要将字典内容按三列结构写入Excel,每行分别存储一级键、二级键、对应值,目标格式如下:
| A列(一级键) | B列(二级键) | C列(值) |
|---|---|---|
| Asset | Name | Max |
| Asset | Age | 28 |
| Asset | Job | Nil |
| Parameter | Marks | 60 |
| Parameter | Height | 177 |
| Parameter | Weight | 76 |
使用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
相关产品推荐
相关产品推荐

