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

如何使用Pandas将Dataframe写入带模板的Excel且不覆盖原有模板

解决Pandas写入Excel模板覆写原有内容的方案

前置依赖

根据你选择的实现方案安装对应依赖:

  • 基础无Office依赖方案:pip install openpyxl
  • 复杂模板高兼容方案:pip install xlwings(需要本地安装Excel/WPS软件)

方案1:openpyxl + Pandas 追加写入

适用场景

无需本地安装Office软件,适用于模板无复杂宏、特殊条件格式的常规场景,支持固定起始行写入或自动识别模板末尾行写入。

实现代码

import pandas as pd
from openpyxl import load_workbook

# 待写入的DataFrame
df = pd.DataFrame({'列1': [1,2,3], '列2': ['a','b','c']})
# 你的模板文件路径
template_path = r'你的模板存储路径\模板文件名.xlsx'
# 要写入的工作表名称
target_sheet = 'Sheet1'

# 加载现有模板,保留原有格式
book = load_workbook(template_path)
writer = pd.ExcelWriter(
    template_path,
    engine='openpyxl',
    mode='a', # 追加模式,不清空原有内容
    if_sheet_exists='overlay' # 工作表存在时直接叠加写入,不重置工作表
)
writer.book = book
writer.sheets = {ws.title: ws for ws in book.worksheets}

# ========== 两种起始行选择方式二选一 ==========
# 方式1:已知模板固定占前N行,比如模板表头占2行,从第3行开始写(startrow从0计数,对应Excel第1行)
# start_row = 2
# 方式2:自动识别当前工作表已有内容的最后一行,从下一行开始写
ws = book[target_sheet]
start_row = ws.max_row

# 写入数据,关闭表头输出避免和模板表头重复
df.to_excel(
    writer,
    sheet_name=target_sheet,
    startrow=start_row,
    index=False,
    header=False
)

writer.save()
writer.close()

方案2:xlwings 写入(格式兼容性最优)

适用场景

模板带有复杂公式、条件格式、宏,对原有格式保留要求极高的场景。

实现代码

import pandas as pd
import xlwings as xw

# 待写入的DataFrame
df = pd.DataFrame({'列1': [1,2,3], '列2': ['a','b','c']})
# 你的模板文件路径
template_path = r'你的模板存储路径\模板文件名.xlsx'
# 要写入的工作表名称
target_sheet = 'Sheet1'

# 后台启动Excel进程,不显示窗口
app = xw.App(visible=False, add_book=False)
wb = app.books.open(template_path)
ws = wb.sheets[target_sheet]

# 定位到已有内容的最后一行下一行,写入数据
last_row = ws.used_range.last_cell.row
ws.range(f'A{last_row + 1}').options(index=False, header=False).value = df

# 保存关闭
wb.save()
wb.close()
app.quit()

注意事项

  • 运行代码前请关闭正在打开的模板文件,避免出现权限报错
  • 待写入的DataFrame列顺序需要和模板列顺序保持一致,避免数据错位
  • 若需要给新写入的内容设置和模板一致的格式,可以在写入完成后通过对应库的样式接口批量设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:39:01