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

使用Xlwings保存带宏Excel时遇‘另一用户操作’报错求助

Xlwings保存带宏Excel文件时的文件占用报错解决

问题概况

操作包含宏的Excel文件时,通过Xlwings代码保存或手动保存均弹出「另一用户正在操作文档,请稍后重试」的错误,仅终止代码后才能正常保存。因其他文件依赖该文件的公式关联,无法通过重命名方式解决。已升级Xlwings至0.29.0,使用上下文管理器代码仍触发com_error报错。

已尝试的代码

with xl.App(visible=True) as app:
    wb = xl.Book(arquivo)
    wb.save()

报错信息

com_error Traceback (most recent call last)  in 
1 with xl.App(visible=True) as app:
2     wb = xl.Book(arquivo)
----> 3     wb.save()

~\Anaconda3\lib\site-packages\xlwings\main.py in save(self, path,
password)    1145             path = utils.fspath(path)    1146
with self.app.properties(display_alerts=False):
-> 1147             self.impl.save(path, password=password)    1148     1149     @property

~\Anaconda3\lib\site-packages\xlwings_xlwindows.py in save(self,
path, password)
823         if (saved_path != "") and (path is None):
824             # Previously saved: Save under existing name
--> 825             self.xl.Save()
826         elif (
827             (saved_path != "") and (path is not None) and (os.path.split(path)[0] == "")

~\Anaconda3\lib\site-packages\xlwings_xlwindows.py in __call__(self,
*args, **kwargs)
107         while True:
108             try:
--> 109                 v = self.__method(*args, **kwargs)
110                 if isinstance(v, (CDispatch, CoClassBaseClass, DispatchBaseClass)):
111                     return COMRetryObjectWrapper(v)

~\Anaconda3\lib\site-packages\win32com\client\dynamic.py in Save(self)

com_error: (-2147352567, 'Exceção.', (0, 'Microsoft Excel', 'O método
Save da classe Workbook falhou', 'xlmain11.chm', 0, -2146827284),
None)

解决方法

  • 清理残留Excel进程:打开任务管理器,结束所有未正常关闭的EXCEL.EXE进程,消除进程对文件的锁定。
  • 调整Xlwings启动参数:添加add_book=False避免自动创建空白工作簿,同时关闭保存提示:
    with xl.App(visible=True, add_book=False) as app:
        app.display_alerts = False
        wb = xl.Book(arquivo)
        # 执行你的业务操作
        wb.save()
        app.display_alerts = True
    
  • 显式释放COM资源:对于带宏的文件,手动关闭工作簿并强制释放COM对象,防止资源泄漏:
    import xlwings as xl
    import win32com.client
    
    app = xl.App(visible=True, add_book=False)
    app.display_alerts = False
    wb = xl.Book(arquivo)
    # 执行操作
    wb.save()
    # 关闭并释放
    wb.close()
    app.quit()
    win32com.client.gc.collect()
    
  • 修改Excel信任设置:进入Excel「文件→选项→信任中心→信任中心设置」,勾选「信任对VBA工程对象模型的访问」,同时暂时关闭「受保护的视图」所有选项。
  • 显式指定路径保存:如果默认save()失效,尝试用save(path=arquivo)显式指定原路径,确保宏格式(.xlsm)保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:21:56