使用Xlsxwriter写入Excel时原有工作表被删除 如何仅修改指定工作表
问题原因
你当前使用xlsxwriter作为写入引擎时,默认会创建全新的Excel文件覆盖原文件,因此原文件中所有未在本次代码中指定写入的工作表都会被直接清除。
解决方法
要保留原有工作表仅写入/更新指定工作表,需要做两个调整:
- 将写入引擎更换为支持追加模式的
openpyxl - 初始化
ExcelWriter时设置写入模式为追加mode='a'
如果需要覆盖原文件中已存在的同名工作表,可通过if_sheet_exists参数配置自动覆盖,避免重名报错。
修改后完整代码
from datetime import datetime import numpy as np import pandas as pd from openpyxl import load_workbook start = datetime.now() df = pd.read_excel(r"C:\Users\harsh\Google Drive\Oddsportal\Files\Oddsportal " r"Data\Historical Worksheet\data.xlsx", sheet_name='x1') df['run_time'] = start df1 = pd.read_csv(r"C:\Users\harsh\Google Drive\Oddsportal\Files\Oddsportal " r"Data\Pre-processed\oddsportal_upcoming_matches.csv") df1['run_time'] = start concat = [df, df1] df_c = pd.concat(concat) path = r"C:\Users\harsh\Google Drive\Oddsportal\Files\Oddsportal Data\Historical Worksheet\data.xlsx" # 改用openpyxl引擎,开启追加模式,自动替换已有同名工作表 with pd.ExcelWriter(path, engine='openpyxl', mode='a', if_sheet_exists='replace') as writer: # index=False用于避免写入多余的索引列,不需要可删除 df.to_excel(writer, sheet_name='x1', index=False) df1.to_excel(writer, sheet_name='x2', index=False) df_c.to_excel(writer, sheet_name='upcoming_archive', index=False) print(df_c.head())
注意事项
- 运行前请确保已安装openpyxl依赖,未安装可执行
pip install openpyxl if_sheet_exists='replace'参数仅在pandas 1.4.0及以上版本支持,如果你使用的是更低版本,可以在写入前手动删除同名工作表:
with pd.ExcelWriter(path, engine='openpyxl', mode='a') as writer: # 低版本pandas手动删除已有同名表 for sheet_name in ['x1', 'x2', 'upcoming_archive']: if sheet_name in writer.book.sheetnames: del writer.book[sheet_name] df.to_excel(writer, sheet_name='x1', index=False) df1.to_excel(writer, sheet_name='x2', index=False) df_c.to_excel(writer, sheet_name='upcoming_archive', index=False)
- 如果不需要覆盖原有同名工作表,将
if_sheet_exists参数改为'new',同时设置新的工作表名称即可。
内容的提问来源于stack exchange,提问作者user16304089
相关产品推荐
相关产品推荐

