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

如何用Pandas在多工作表Excel中追加新工作表并保留格式?

问题与解决方案

问题描述

现有Python脚本通过Pandas读取JSON数据,生成带单元格居中格式的Excel工作表。需求是每周获取新数据后,追加为该Excel的新工作表,但遇到两个问题:

  • 若读取现有Excel重新写入所有新旧数据,无法保留原单元格格式;
  • 直接追加数据时,使用Pandas 2.2.3在Linux环境下运行会创建新文件,导致原有工作表丢失。

最优方案:直接追加新工作表

重新写入所有数据效率低且格式保留成本高,最优选择是调整Pandas的ExcelWriter参数,实现追加模式写入新工作表,避免覆盖原有内容。

具体实现步骤

核心修改点

使用openpyxl引擎时,设置mode='a'(追加模式),同时先判断Excel文件是否存在:

  • 若文件不存在,按原逻辑创建新文件;
  • 若文件已存在,以追加模式打开,添加新工作表。

修改后的完整代码

import pandas as pd
import os

fichero_excel_salida = 'Estad.xlsx'
nombre_pagina = 'Jornada_' + str(num_jornada)  # 确保num_jornada唯一,比如每周递增
count = 0

# 判断文件是否存在,决定写入模式
if os.path.exists(fichero_excel_salida):
    writer = pd.ExcelWriter(fichero_excel_salida, engine="openpyxl", mode="a", if_sheet_exists="error")
else:
    writer = pd.ExcelWriter(fichero_excel_salida, engine="openpyxl")

try:
    # 生成DataFrame并写入新工作表
    for key, contenido_dict in dict_dict_excels.items():
        count += 1
        df = pd.DataFrame(data=contenido_dict)
        if count % 2 != 0:
            df = df.T
        
        # 应用居中格式并写入指定位置
        styled_df = df.style.set_properties(**{'text-align': 'center'})
        if count == 1:
            styled_df.to_excel(writer, sheet_name=nombre_pagina, startcol=0, startrow=1)
        elif count == 2:
            styled_df.to_excel(writer, sheet_name=nombre_pagina, startcol=0, startrow=6, header=True, index=True)
        elif count == 3:
            styled_df.to_excel(writer, sheet_name=nombre_pagina, startcol=0, startrow=11)
finally:
    writer.close()

关键参数说明

  • mode="a":开启追加模式,不会覆盖原有工作表;
  • if_sheet_exists="error":若要添加的工作表名称已存在,直接报错(也可设为"replace"替换,根据需求调整);
  • 保留原有的单元格居中格式逻辑,确保新工作表格式与历史一致。

注意事项

  1. 确保已安装openpyxl依赖:执行pip install openpyxl;
  2. Linux环境下需保证脚本对目标Excel文件有读写权限;
  3. 每次生成的nombre_pagina必须唯一(比如用周数、日期作为后缀),避免工作表重复报错;
  4. 若需要对原有工作表格式做修改,可结合openpyxl直接操作Excel对象,但追加新工作表无需此步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:23:09