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

使用Python合并CSV/XLSX数据至主Excel:格式警告与工作表保护需求

问题

执行Python脚本将多个.csv和.xlsx文件中的原始数据复制到主Excel文件时,触发一系列警告:

UserWarning: DrawingML support is incomplete and limited to charts and images only. Shapes and drawings will be lost.
UserWarning: Data Validation extension is not supported and will be removed
UserWarning: Unknown extension is not supported and will be removed
UserWarning: Conditional Formatting extension is not supported and will be removed
UserWarning: Slicer List extension is not supported and will be removed

背景信息

  • 待写入的目标工作表仅A-Z列为原始数据区域,AA列及以后为公式,无图表、数据验证等复杂元素;
  • 主Excel文件的其他工作表包含数据验证、切片器、图表等元素,需要完整保留。

需求

  • 仅操作指定的目标工作表,不破坏主文件中其他工作表的内容;
  • 成功将外部文件的原始数据写入主文件的指定位置。

尝试的代码

with pd.ExcelWriter(template1_path, mode="a", engine="openpyxl", if_sheet_exists="overlay") as writer:
    df_report1.to_excel(writer, index=False, header=False, sheet_name=sheet_1, startrow=4)
    df_report2.to_excel(writer, index=False, header=False, sheet_name=sheet_2, startrow=5)
    df_report3.to_excel(writer, index=False, header=False, sheet_name=sheet_3, startrow=4)
    df_report4.to_excel(writer, index=False, header=False, sheet_name=sheet_4, startrow=4)
    df_report5.to_excel(writer, index=False, header=False, sheet_name=sheet_5, startrow=4)
解决方案

问题出在pd.ExcelWriter的追加模式:它会读取并重新保存整个工作簿,导致openpyxl不支持的元素(切片器、数据验证等)被移除。改用openpyxl直接操作单个工作表,只修改需要更新的单元格,完全不触碰其他工作表,就能解决这个问题。

实现步骤

  1. 用openpyxl打开主Excel文件(允许写入);
  2. 定位到需要写入数据的目标工作表;
  3. 将DataFrame的数据逐行写入指定起始行;
  4. 保存并关闭工作簿。

示例代码

import openpyxl
import pandas as pd

def write_data_to_sheet(workbook, df, sheet_name, start_row):
    """将DataFrame写入指定工作表的指定起始行"""
    sheet = workbook[sheet_name]
    # 遍历DataFrame的每一行,写入Excel单元格
    for row_num, row_values in enumerate(df.values, start=start_row):
        for col_num, value in enumerate(row_values, start=1):  # Excel列索引从1开始(对应A列)
            sheet.cell(row=row_num, column=col_num, value=value)

# 1. 读取需要写入的数据源(根据实际路径替换)
df_report1 = pd.read_csv("path/to/report1.csv")
df_report2 = pd.read_excel("path/to/report2.xlsx")
df_report3 = pd.read_excel("path/to/report3.xlsx")
df_report4 = pd.read_excel("path/to/report4.xlsx")
df_report5 = pd.read_excel("path/to/report5.xlsx")

# 2. 打开主工作簿(read_only=False允许修改)
wb = openpyxl.load_workbook(template1_path)

# 3. 写入每个DataFrame到对应工作表
write_data_to_sheet(wb, df_report1, sheet_1, 4)
write_data_to_sheet(wb, df_report2, sheet_2, 5)
write_data_to_sheet(wb, df_report3, sheet_3, 4)
write_data_to_sheet(wb, df_report4, sheet_4, 4)
write_data_to_sheet(wb, df_report5, sheet_5, 4)

# 4. 保存并关闭工作簿
wb.save(template1_path)
wb.close()

额外提示

  • 如果需要覆盖目标区域的原有数据,可以在写入前清空对应单元格(比如遍历A4到Z列的所有行,设置值为空);
  • 确保主Excel文件在运行脚本时未被其他程序占用,否则会触发写入失败;
  • openpyxl会完整保留未操作工作表的所有原生元素,不会出现丢失或损坏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:15:42