使用xlwings创建Excel工作表出现顺序颠倒问题求助
xlwings创建Excel工作表顺序颠倒问题
用xlwings编写Python代码生成Excel工作表时,出现了工作表顺序和JSON数据顺序颠倒的问题——循环逻辑、原始JSON数据顺序都没问题,试了reverse方法也没用。相关代码片段如下:
# 遍历工作簿的每个工作表数据 for sheet_data in data['sheets']: sheet_id = sheet_data['id'] sheet_data = sheet_data['data'] # 创建新工作表 sheet = wb.sheets.add(sheet_id) # 遍历工作表的每一行数据 for i, row_data in enumerate(sheet_data): # 遍历行内每个单元格,写入值或公式到对应Excel单元格 for j, cell_data in enumerate(row_data): cell = sheet.cells(i+1, j+1)
问题原因
xlwings的wb.sheets.add()方法默认会把新工作表插入到当前活动工作表的前面,而非工作簿末尾。循环创建时,每次新表都会插在已创建表的前面,最终顺序就和循环遍历的顺序相反了。
解决方法
直接在创建工作表时指定插入位置为工作簿最后一个工作表之后:
修改wb.sheets.add()的调用,添加after=wb.sheets[-1]参数:
# 遍历工作簿的每个工作表数据 for sheet_data in data['sheets']: sheet_id = sheet_data['id'] sheet_data = sheet_data['data'] # 在工作簿末尾创建新工作表 sheet = wb.sheets.add(sheet_id, after=wb.sheets[-1]) # 遍历工作表的每一行数据 for i, row_data in enumerate(sheet_data): # 遍历行内每个单元格,写入值或公式到对应Excel单元格 for j, cell_data in enumerate(row_data): cell = sheet.cells(i+1, j+1) cell.value = cell_data # 补充写入逻辑
这样每次新工作表都会被添加到现有所有工作表的最后,最终顺序就和你遍历JSON数据的顺序一致了。
内容的提问来源于stack exchange,提问作者sabandairdze
相关产品推荐
相关产品推荐

