我的Excel工作簿未通过执行突出显示的最后一条语句而关闭。但是会抛出如下错误…
我的代码…
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible= True
excelApl = excel.Application.Workbooks.Open ("C:TechnicalAutomationScriptsTestExcelCOM.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:TechnicalAutomationScriptsTestExcelCOM.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 FilesPython39Libsite-packagespythonwinpywinframeworkscriptutils.py", line 363, in RunScript
exec(codeObject, __main__.__dict__)
File "C:TechnicalAutomationScriptsTestscript.py", line 13, in <module>
excel.Application.Workbooks("C:TechnicalAutomationScriptsTestExcelCOM.xlsx").Close
File "C:Usersjpillai1AppDataLocalTempgen_py3.9 0020813-0000-0000-C000-000000000046x0x1x9Workbooks.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)
>>>
要关闭工作簿。
Workbooks属性返回一个表示所有打开的工作簿的Workbooks
集合。对象的名称或索引号可用于检索特定的工作簿实例,但文件路径如代码中所示:
excel.Application.Workbooks("C:TechnicalAutomationScriptsTestExcelCOM.xlsx").Close
考虑使用ActiveWorkbook属性,它返回一个Workbook
对象,表示活动窗口(最上面的窗口)中的工作簿。因此,代码可以按照以下方式重写:
excel.Application.ActiveWorkbook.Close
或简单的:
excelApl.Close
总是处理从Open
方法中检索到的对象实例。
有很多多余的赋值和间接操作在进行:最好创建一些临时变量。
重写:
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible= True
wb = excel.Workbooks.Open('C:TechnicalAutomationScriptsTestExcelCOM.xlsx')
ws = wb.Worksheets('Sheet1')
rng = ws.Range('A2')
rng.Value = 'Stay with me'
print(rng.Value)
rng.Value = 'Hello'
a = rng.Value
print(a)
wb.Close(False) #Don't save changes
也就是说,错误的原因是Excel只使用工作簿短名称进行索引(即'TestExcelCOM.xlsx'没有路径),这就是为什么你不能同时打开两个具有相同短名称的工作簿。你有时可以得到只是'TestExcelCom'作为索引,但这将只返回一个工作簿,即使你有两个文件,只有不同的扩展名(例如。xlsx和。xlsm)。