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

如何用Python将带格式的Excel工作表复制到已创建的文件且不覆盖原有内容

解决思路与代码实现

首先得明确你当前代码的核心问题:你最后一步是加载了readme tab.xlsx文件,修改后直接保存到Archivo.xlsx的路径上——这相当于把readme tab.xlsx的内容完全覆盖掉了之前用pandas生成的Archivo.xlsx,自然会丢失原有的工作表。

正确的逻辑应该是先加载已经生成好的主文件(Archivo.xlsx),再把另一个文件里的目标工作表完整复制进去,而不是反过来操作。下面是具体的实现方案,用openpyxl来完成带完整格式的工作表复制:

完整代码示例

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils import get_column_letter

# 第一步:执行你原有的Excel生成逻辑(替换成你的实际数据和配置)
path = r"Archivo.xlsx"
# 示例数据,替换成你自己的df1
df1 = pd.DataFrame({"col1": [1,2,3], "col2": [4,5,6], "col3": [7,8,9]})
writer = pd.ExcelWriter(path, engine='xlsxwriter')
df1.to_excel(writer, sheet_name='Data', index=False)
workbook = writer.book
ws_graph = workbook.add_worksheet('Graph')
writer.sheets['Data'].set_column(1, 29, 30)
# 用close代替save,确保文件完全写入并释放资源
writer.close()

# 第二步:加载主文件和要复制的源文件
main_workbook = load_workbook(path)
# data_only=False保留公式,True则只取公式计算后的结果
source_workbook = load_workbook("readme tab.xlsx", data_only=False)
# 替换成你要复制的具体工作表名称,比如source_workbook.active取第一个工作表
source_worksheet = source_workbook['目标工作表名称']

# 第三步:在主文件中新建工作表,用于存放复制的内容
new_worksheet = main_workbook.create_sheet(title='复制的说明页') # 自定义新表名称

# 第四步:完整复制单元格内容与格式
# 1. 复制单元格值和样式(背景色、字体、字号、边框等)
for row in source_worksheet.iter_rows():
    for cell in row:
        new_worksheet[cell.coordinate].value = cell.value
        # 直接复制完整样式,这是保留所有格式的关键
        new_worksheet[cell.coordinate]._style = cell._style

# 2. 复制行高
for row_num in range(1, source_worksheet.max_row + 1):
    new_worksheet.row_dimensions[row_num].height = source_worksheet.row_dimensions[row_num].height

# 3. 复制列宽
for col_num in range(1, source_worksheet.max_column + 1):
    col_letter = get_column_letter(col_num)
    new_worksheet.column_dimensions[col_letter].width = source_worksheet.column_dimensions[col_letter].width

# 4. 复制合并单元格
for merged_range in source_worksheet.merged_cells.ranges:
    new_worksheet.merge_cells(str(merged_range))

# 第五步:保存修改后的主文件
main_workbook.save(path)

关键细节说明

  • data_only参数:加载源文件时设置data_only=False会保留单元格中的公式;如果只需要公式计算后的静态值,设置为True即可。
  • 样式完整复制:通过_style属性直接复制单元格的完整样式,这是openpyxl中最直接的方式,能保留背景色、字体、字号、对齐方式、边框等所有格式。
  • 行高列宽与合并单元格:这些属于工作表的维度设置,需要单独复制,否则只会复制单元格内容和基础样式,行高列宽、合并单元格会丢失。
  • 文件关闭:用writer.close()代替writer.save(),确保pandas生成的文件完全写入磁盘,避免后续openpyxl加载时出现文件占用或内容不完整的问题。

这样操作后,你的Archivo.xlsx会保留原来的Data和Graph工作表,同时新增一个和源文件工作表格式完全一致的新工作表,不会覆盖原有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:52:48