Программная отладка модуля excel vba с использованием python

#python #excel #vba #pywin32

Вопрос:

Есть ли способ установить точку останова и программно использовать модуль Excel vba с помощью pywin32 ? До сих пор мне удавалось подключиться к открытому экземпляру excel, добавить книгу, добавить модуль vba, а затем внедрить его из текстового файла в этот модуль.

 import win32com.client as win32
excel = win32.Dispatch("Excel.Application") # generates a com instance
excel.Visible = True
workbook = excel.Workbooks.Add()
xlmodule = workbook.VBProject.VBComponents.Add(1)

with open('test.bas') as fo:
    xlmodule.CodeModule.AddFromString(fo.read())

print('don')
 

Я не уверен, как затем добавить точку останова, а затем отлаживать модуль построчно. Я знаю, что XL.Application.Run это может запустить модуль для меня, но на самом деле я хочу отладить его с помощью python. Есть какие-нибудь идеи?

Редактировать

По просьбам в комментариях, вот мой неудачный, но, тем не менее, очень распространенный вариант использования:

У меня есть устаревшая электронная таблица с поддержкой макросов, которую я хотел бы преобразовать в python, используя некоторую форму подхода, основанного на тестировании. Я использую pywin32 для подключения к COM-представлениям модулей и их запуска. Я использую pytest для сравнения свои собственные функции на основе python, чтобы убедиться, что я точно воспроизводю результаты.

Недостающая, но важная часть-это покрытие кода. Согласно этой ссылке, в настоящее время нет инструментов покрытия кода для модулей VBA. Мне нужен способ обойти это. Если я смогу запустить свой pywin32 набор тестов на основе и отслеживать, какие строки выполняются, подключившись к отладчику VBA, я смогу выполнить некоторые грубые, хотя и медленные оценки покрытия кода.

Комментарии:

1. Любопытный… в каком случае это нужно использовать?

2. @BigBen: Только мои мысли…

3. @BigBen, пожалуйста, взгляните на правку моего первоначального вопроса. Дайте мне знать, если что-то будет неясно

4. Мои два цента — это очень сложно и не стоит вашего времени пытаться это сделать. Признайте невозможное/неосуществимое и двигайтесь дальше.

5. @BigBen как бы вы посоветовали это сделать ?