我没有自动化 Excel,但我正在使用 Microsoft语音 API中的一些代码,这些代码可能与您开始使用的足够相似:
ListenerBase = win32com.client.getevents("SAPI.SpInProcRecoContext")
class Listener(ListenerBase):
def OnRecognition(self, _1, _2, _3, Result):
"""Callback whenever something is recognized."""
# Work with Result
def OnHypothesis(self, _1, _2, Result):
"""Callback whenever we have a potential match."""
# Work with Result
然后在主循环中:
while not self.shutting_down.is_set():
# Trigger the event handlers if we have anything.
pythoncom.PumpWaitingMessages()
time.sleep(0.1) # Don't use up all our CPU checking constantly
编辑以获取有关主循环的更多详细信息:
当事情发生时,回调不会立即被调用;相反,您必须调用 PumpWaitingMessages(),它会检查是否有任何事件在等待,然后调用适当的回调。
如果你想在这种情况下做其他事情,你必须在一个单独的线程中运行循环(参见线程模块);否则它只能位于脚本的底部。在我的示例中,我在一个单独的线程中运行它,因为我还运行了一个 GUI;shutdown_down 变量是一个 threading.Event,您可以使用它来告诉循环线程停止。