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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 05:24:17