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

xlwings操作xlsm偶发无响应、误关其他Excel及openpyxl保存报错求解

解决方案

xlwings问题修复(优先推荐,对xlsm兼容性最好)

问题根源

  • 原有代码直接调用xw.Book()会默认复用当前系统激活的Excel实例,如果该实例正处于用户编辑状态(比如单元格编辑未结束、有弹窗未处理),就会卡住无响应。
  • 直接获取xw.apps.active然后调用quit,会关闭用户正在使用的Excel实例,导致所有打开的文件都被关掉。

修正方案

核心逻辑是创建独立的Excel实例处理目标文件,和用户正在使用的Excel实例完全隔离,修正后代码如下:

import xlwings as xw

file_path = 'C:/Users/ijung/Desktop/210919_Mk_Lot_test/210922_101test.xlsm'
# 新建完全独立的Excel实例,和用户打开的Excel互不影响
app = xw.App(add_book=False, visible=False)
app.display_alerts = False  # 屏蔽系统弹窗,避免卡住代码
try:
    # 仅在当前独立实例中打开目标文件
    wb_xl = app.books.open(file_path)
    ws_xl = wb_xl.sheets['Main']
    ws_xl.range('A1').value = 'test'
    wb_xl.save()
finally:
    # 仅关闭代码打开的工作簿
    wb_xl.close()
    # 仅退出当前代码创建的独立实例,不会影响其他正在使用的Excel
    app.quit()
    # 兜底清理,避免后台残留Excel僵尸进程
    app.kill()

openpyxl报错问题说明

xml.etree.ElementTree.ParseError报错是因为openpyxl对xlsm格式的兼容性有限,如果你的xlsm包含复杂VBA项目、ActiveX控件、自定义XML属性等Excel专有特性,openpyxl解析文件XML结构时会出错,没有通用的完美修复方案。如果一定要用openpyxl,可以尝试先将目标xlsm文件通过Excel手动另存一次,清除异常XML结构后再测试,但还是优先推荐xlwings方案,因为直接调用Excel原生接口,不存在兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:57:01