Я не автоматизировал Excel, но я использую некоторый код из Speech API от Microsoft , который может быть достаточно похожим для начала работы:
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 (), которая проверяет, ожидают ли какие-либо события, а затем вызывает соответствующий обратный вызов.
Если вы хотите сделать что-то еще, пока это происходит, вам придется запустить цикл в отдельном потоке (см. Модуль потоков); в противном случае он может просто сидеть внизу вашего сценария. В моем примере я запускал его в отдельном потоке, потому что у меня также был запущен графический интерфейс; переменная shutting_down является threading.Event, который вы можете использовать, чтобы сообщить зацикливающемуся потоку об остановке.