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

使用openpyxl将嵌套字典写入Excel的问题求助

解决openpyxl写入嵌套字典到Excel的格式问题

问题修复思路

  1. 拆分列表值:将每个字典键对应的列表元素逐个拆解,生成独立的键 -> 元素格式字符串,每个字符串单独占据一个单元格。
  2. 按列连续写入:针对每个Stage单独处理记录,将该Stage的所有拆分后记录连续写入对应列,避免跨行空白。

完整修改代码

import openpyxl

# 嵌套字典数据
nested_dict = {
    0: {'DIM_NRC_CUSTOMER_TMP': ['SQ_DIM_NRC_CUSTOMER_TMP'], 'SAT_CONTACT': ['SQ_HUB_CUSTOMER'], 'SAT_CUSTOMER_DERIVED': ['SQ_HUB_CUSTOMER'], 'SAT_CUSTOMER': ['SQ_HUB_CUSTOMER'], 'SAT_CUSTOMER_PREDICTED': ['SQ_HUB_CUSTOMER'], 'HUB_CUSTOMER': ['SQ_HUB_CUSTOMER']},
    1: {'SQ_DIM_NRC_CUSTOMER_TMP': ['UPDTRANS'], 'SQ_HUB_CUSTOMER': ['LKP_SH_MOBILE_PH_NO', 'EXP_PREPARE_DATA', 'lkp_LNK_CUSTOMER_CUST_GROUP', 'LKP_CIS_CUSTOMER', 'lkp_REF_EARLY_ADOPTERS', 'LKP_GPRS_USAGE_AVG', 'LKP_EMP_FLAG', 'lkp_SH_MOBILE_PH_Active', 'exp_MOBILE_PH_NO']},
    2: {'UPDTRANS': ['DIM_NRC_CUSTOMER_Update'], 'LKP_SH_MOBILE_PH_NO': ['EXP_PREPARE_DATA'], 'EXP_PREPARE_DATA': ['FIL_InsertNewRecord', 'FIL_UpdateChangedRecord', 'EXP_DetectChanges', 'LKP_GetData'], 'lkp_LNK_CUSTOMER_CUST_GROUP': ['EXP_PREPARE_DATA'], 'LKP_CIS_CUSTOMER': ['EXP_PREPARE_DATA'], 'lkp_REF_EARLY_ADOPTERS': ['EXP_PREPARE_DATA'], 'LKP_GPRS_USAGE_AVG': ['EXP_PREPARE_DATA'], 'LKP_EMP_FLAG': ['EXP_PREPARE_DATA'], 'lkp_SH_MOBILE_PH_Active': ['EXP_PREPARE_DATA'], 'exp_MOBILE_PH_NO': ['lkp_SH_MOBILE_PH_Active']},
    3: {'FIL_InsertNewRecord': ['UPD_ForceInserts'], 'FIL_UpdateChangedRecord': ['UPD_ChangedUpdate'], 'EXP_DetectChanges': ['FIL_InsertNewRecord', 'FIL_UpdateChangedRecord'], 'LKP_GetData': ['FIL_UpdateChangedRecord', 'EXP_DetectChanges']},
    4: {'UPD_ForceInserts': ['DIM_NRC_CUSTOMER_Insert'], 'UPD_ChangedUpdate': ['DIM_NRC_CUSTOMER_TMP_Insert']}
}

# 加载现有工作簿并创建新工作表
workbook = openpyxl.load_workbook(r"C:\Desktop\multiple_sheets_details_new.xlsx")
sheet = workbook.create_sheet(title="MAPPING", index=0)

# 写入表头
stage_numbers = sorted(nested_dict.keys())
for col_idx, stage_num in enumerate(stage_numbers, start=1):
    sheet.cell(row=1, column=col_idx, value=f'Stage{stage_num}')

# 为每个Stage生成拆分后的记录列表,并写入对应列
for col_idx, stage_num in enumerate(stage_numbers, start=1):
    stage_data = nested_dict[stage_num]
    records = []
    # 拆解列表值,生成独立记录
    for key, values in stage_data.items():
        for val in values:
            records.append(f'{key} -> {val}')
    # 连续写入当前Stage列
    for row_idx, record in enumerate(records, start=2):
        sheet.cell(row=row_idx, column=col_idx, value=record)

# 保存工作簿
workbook.save(r"C:\Desktop\multiple_sheets_details_new.xlsx")

关键修改说明

  • 路径转义:将文件路径改为原始字符串(前缀r),避免转义字符引发错误。
  • 记录拆解:遍历每个Stage的键值对,将列表中的每个元素单独生成一条格式化记录,确保每个元素占一个单元格。
  • 按列写入:每个Stage对应一列,从第二行开始依次写入所有记录,保证列内记录连续无空白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:46:19