[英]Python Interactions with Excel Macros
我想从我的 Python 代码退出我的 Excel 应用程序。 我的 Python 代码打开一本 excel 的书,运行一个宏,然后关闭这本书。 但是,Excel 应用程序仍在运行。 我怎样才能退出Excel?
这是我从 Python IDLE 得到的错误:
(-2147417848, 'The object invoked has disconnected from its clients.', None, None)
这是我的 Python 代码:
import xl
report = xl.Workbook(r"C:\Desktop\Reader.xlsm")
print(report)
report.xlWorkbook.Application.Run('Reader')
report.xlWorkbook.Close(SaveChanges=False)
report.xlWorkbook.Application.Quit()
print("The job is done")
这是我的 Excel 宏:
Public Sub Reader()
MsgBox ("Hello World")
End Sub
dwirony的评论是一种绝对可用的解决方法。 但是,您确实想采取正确的方法,否则可能会导致Excel进程挂起和内存泄漏。
我认为正确的方法是:
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
report = xl.Workbooks.Open("C:\Desktop\Reader.xlsm")
xl.Application.Run('Reader')
report.Close False
xl.Application.Quit()
xl = None
del xl
print("The job is done")
谢谢,当我遇到 xlwings 问题时它有所帮助:我已将您的答案与这篇文章联系起来: com_error: (-2147352567, 'Exception occurred.', (0, None, None, None, 0, -2147024809), None)
以上解决方案适用于 python 2。对于 python 3,它看起来像:
import win32com.client
xl = win32com.client.Dispatch("Excel.Application")
filepath = *INSERTFILEPATHHERE* #for example "C:\Desktop\Reader.xlsm"
report = xl.Workbooks.Open(filepath)
xl.Application.Run('Reader')
report.close() #empty brackets
xl.Application.quit()
xl = None
del xl
print("The job is done")
您也可以使用 xlwings 或 openpyxl 而不是 win32com 来处理您的文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.