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

Python通过COM操作Excel时执行关闭工作簿语句报错

问题:win32com操作Excel时无法关闭工作簿并抛出com_error错误

使用Python的win32com.client库操作Excel时,执行关闭工作簿的语句失败,抛出如下错误。以下是代码及报错信息,需要实现正常关闭工作簿的功能:

原代码

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')

excel.Visible= True

excelApl = excel.Application.Workbooks.Open ("C:\Technical\AutomationScripts\TestExcelCOM.xlsx")
a = excelApl.Worksheets("Sheet1").Range("A2").Value = "Stay with me"
a = excelApl.Worksheets("Sheet1").Range("A2").Value
print(a)
a = excelApl.Worksheets("Sheet1").Range("A2").Value = "Hello"
print(a)

excel.Application.Workbooks("C:\Technical\AutomationScripts\TestExcelCOM.xlsx").Close

报错信息

pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
>>> Stay with me
Hello
Traceback (most recent call last):
  File "C:\Program Files\Python39\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 363, in RunScript
    exec(codeObject, __main__.__dict__)
  File "C:\Technical\AutomationScripts\Testscript.py", line 13, in <module>
    excel.Application.Workbooks("C:\Technical\AutomationScripts\TestExcelCOM.xlsx").Close
  File "C:\Users\jpillai1\AppData\Local\Temp\gen_py\3.9\00020813-0000-0000-C000-000000000046x0x1x9\Workbooks.py", line 198, in __call__
    ret = self._oleobj_.InvokeTypes(0, LCID, 2, (13, 0), ((12, 1),),Index
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147352565), None)
>>> 

问题原因及修正方案

问题点:

  1. 路径转义错误:Windows路径中的\是转义字符,直接使用会导致路径解析异常,需改为\\或使用原始字符串r""。
  2. Workbooks集合引用错误:通过Workbooks()引用工作簿时,参数应该是工作簿的文件名(如TestExcelCOM.xlsx),而非完整路径。
  3. 方法调用错误:Close是方法,必须加括号Close()才能执行,直接写Close只是引用方法对象,不会触发关闭操作。

最优修正方案

直接使用之前打开工作簿时获取的excelApl对象调用Close(),无需重新通过路径查找,代码更简洁且避免路径相关问题:

import win32com.client as win32
# 使用原始字符串处理路径,避免转义问题
file_path = r"C:\Technical\AutomationScripts\TestExcelCOM.xlsx"

excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True

# 打开工作簿并保存引用
excelApl = excel.Application.Workbooks.Open(file_path)

# 修改单元格值
excelApl.Worksheets("Sheet1").Range("A2").Value = "Stay with me"
print(excelApl.Worksheets("Sheet1").Range("A2").Value)
excelApl.Worksheets("Sheet1").Range("A2").Value = "Hello"
print(excelApl.Worksheets("Sheet1").Range("A2").Value)

# 直接使用已有的工作簿对象关闭,可添加参数控制是否保存:Close(SaveChanges=True)
excelApl.Close()
# 可选:如果需要退出Excel程序,执行下面的语句
# excel.Quit()

另一种修正方式(通过文件名查找)

如果必须通过Workbooks集合查找,需使用文件名而非完整路径,同时修正路径转义和方法调用:

# 替换原关闭语句为:
excel.Application.Workbooks("TestExcelCOM.xlsx").Close()

内容的提问来源于stack exchange,提问作者Joseph Stalin Pillai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:05:19