#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 как бы вы посоветовали это сделать ?