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

pandas DataFrame写入xlsm指定sheet时报[Content_Types].xml错误如何解决

错误原因

这个KeyError的核心是你要加载的test.xlsm不是合法的启用宏Excel文件,缺少OOXML格式要求的必备配置文件[Content_Types].xml,常见触发场景:

  • 该文件是直接修改xlsx/其他格式文件后缀得到的,没有通过Excel正规另存为xlsm格式
  • 文件已经被损坏,比如之前运行代码时文件被Excel/WPS占用,强行保存破坏了压缩包结构
  • openpyxl版本过低,对xlsm格式的兼容存在bug
  • 你试图用openpyxl直接创建新的xlsm文件,openpyxl不支持直接生成xlsm,只能编辑已有的合法xlsm模板

解决方案

第一步 先验证源文件合法性

  1. 手动用Excel/WPS打开test.xlsm,确认可以正常访问、没有文件损坏提示,如果打不开直接替换为正常创建的xlsm文件
  2. 确认运行代码时,test.xlsm没有被任何其他程序打开占用
  3. 提前备份原xlsm文件,避免代码运行出错损坏原始数据

第二步 升级依赖+修正代码

先升级openpyxl到最新版本:

pip install --upgrade openpyxl

修正后的参考代码:

from openpyxl.utils.dataframe import dataframe_to_rows
import pandas as pd
from openpyxl import load_workbook
import shutil

# 先备份原文件,防止损坏
shutil.copy2('test.xlsm', 'test_backup.xlsm')

prices = pd.DataFrame({
    'name': ['Fred', 'Jane', 'Alice', 'Margaret'], 
    'street': ['Baker Street', 'Downing Street', 'Baker Street', 'Castle Street'],
    'stamp': ['', 'T03', '', ''],
    'city': ['', 'London', '', ''],
    'other irrelevant columns for this task' : [1, 2, 3, 4]
})

# 加载xlsm必须加keep_vba=True参数
book = load_workbook('test.xlsm', keep_vba=True)
# 可指定写入的工作表,比如ws = book['你要写入的工作表名']
ws = book.active

rows = dataframe_to_rows(prices, index=False, header=True)
for r_index, row in enumerate(rows, 1):
    for c_index, value in enumerate(row, 1):
        ws.cell(row=r_index, column=c_index, value=value)

# 保存后关闭工作簿
book.save('test.xlsm')
book.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:05