使用openpyxl将嵌套字典写入Excel的问题求助
解决openpyxl写入嵌套字典到Excel的格式问题
问题修复思路
- 拆分列表值:将每个字典键对应的列表元素逐个拆解,生成独立的
键 -> 元素格式字符串,每个字符串单独占据一个单元格。 - 按列连续写入:针对每个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
相关产品推荐
相关产品推荐

