如何通过Python向已有Excel文件添加工作表?
修复方案
你的问题根源在于:使用openpyxl创建ExcelWriter时没有加载已有Excel文件,直接新建会覆盖原有内容;而xlsxwriter本身不支持追加工作表,只能生成新文件。以下是直接可用的修复方案:
核心修改思路
- 统一用
openpyxl引擎,它支持读取已有工作簿并追加新工作表 - 判断目标文件是否存在:存在则加载原有工作簿,不存在则新建
- 可选处理同名工作表:要么覆盖,要么自动重命名,按需选择
修改后的代码
import os import pandas as pd from openpyxl import load_workbook def Convert(self): list_data_conv = self.list_data df = pd.DataFrame(list_data_conv) excel_file = f"{self.Entry_ExcelName.get()}.xlsx" sheet_name = self.Entry_SheetName.get() # 处理文件存在/不存在的情况 if os.path.exists(excel_file): # 加载已有工作簿 book = load_workbook(excel_file) # 追加模式打开,同名工作表选择覆盖(可选改成'new'自动重命名或'error'报错) writer = pd.ExcelWriter(excel_file, engine='openpyxl', mode='a', if_sheet_exists='replace') # 关联已有工作簿和工作表信息,避免丢失原有内容 writer.book = book writer.sheets = {ws.title: ws for ws in book.worksheets} else: # 文件不存在,直接新建 writer = pd.ExcelWriter(excel_file, engine='openpyxl') # 写入数据(index=False可去掉默认行索引,按需开启) df.to_excel(writer, sheet_name=sheet_name, index=False) writer.close() # 用close替代save,是pandas推荐的规范写法 self.excel_file_old = excel_file
关键细节说明
mode='a':以追加模式打开文件,保留原有内容if_sheet_exists='replace':如果指定工作表已存在则覆盖,可替换为'new'自动生成带后缀的新表,或'error'触发错误提示用户- 必须关联
writer.book和writer.sheets:否则pandas会重置工作簿,导致原有内容被清空 - 去掉了原代码中不必要的引擎分支判断,统一用openpyxl即可满足新旧文件的处理需求
内容的提问来源于stack exchange,提问作者Dominik
相关产品推荐
相关产品推荐

