如何用Python基于Excel模板生成新文件且保留原模板?
实现方案:基于Excel模板插入数据并另存新文件
完全可以实现你的需求——基于无数据的Excel模板插入DataFrame数据后另存为新文件,同时保留原模板完整不变。以下是结合你指定工具的具体实现步骤和代码:
核心思路
- 用
openpyxl加载原始Excel模板(仅读取,不修改原文件) - 用
pandas.ExcelWriter结合openpyxl引擎,将加载的模板作为基础工作簿 - 将爬取得到的
DataFrame写入模板指定的工作表 - 最后将工作簿另存为新文件,原模板文件全程不会被修改
完整代码示例
# 导入所需库 import requests from bs4 import BeautifulSoup import pandas as pd from openpyxl import load_workbook from pandas import ExcelWriter # ---------------------- # 1. 爬取数据并生成DataFrame(替换为你的实际爬取逻辑) # ---------------------- url = "https://example.com/target-page" # 替换为你的目标URL response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # 模拟爬取到的数据(替换为你实际解析得到的数据) data = { "列1": ["数据1", "数据2", "数据3"], "列2": [100, 200, 300], "列3": ["内容A", "内容B", "内容C"] } df = pd.DataFrame(data) # ---------------------- # 2. 加载Excel模板并写入数据 # ---------------------- template_path = "path/to/your/template.xlsx" # 替换为你的模板文件路径 output_path = "path/to/your/new_output.xlsx" # 替换为新文件的保存路径 # 加载模板工作簿,保留原格式(若模板有宏需添加keep_vba=True) wb = load_workbook(template_path) # 初始化ExcelWriter,指定使用openpyxl引擎,并传入已加载的工作簿 with ExcelWriter(output_path, engine="openpyxl", mode="w") as writer: # 将加载的模板工作簿关联到writer writer.book = wb # 将模板中的工作表信息同步到writer writer.sheets = {ws.title: ws for ws in wb.worksheets} # 将DataFrame写入指定工作表(示例为"Example Sheet") # startrow=1表示从第2行开始写(若模板第1行是表头),header=False避免重复写入表头 df.to_excel(writer, sheet_name="Example Sheet", startrow=1, index=False, header=False) # 执行完后,原模板文件template.xlsx保持不变,新文件output.xlsx为插入数据后的结果
关键细节说明
- 保留模板格式:
openpyxl会完整加载模板的样式、列宽、合并单元格等格式,写入数据后这些格式会被保留在新文件中 - 避免修改原模板:全程仅读取原模板文件,最终将修改后的工作簿保存到新路径,原文件无任何改动
- 表头处理:如果你的Excel模板已经包含表头,记得设置
header=False和startrow=1(根据实际表头所在行数调整),避免重复写入表头 - 宏模板支持:若模板包含VBA宏,加载时添加
keep_vba=True参数即可保留宏代码
内容的提问来源于stack exchange,提问作者Dominik Kostienko
相关产品推荐
相关产品推荐

