繁体   English   中英

Python 与 Excel 宏的交互

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM