Форум сайта python.su
Здравствуйте. Хочу делать com-надстройки для MS Excel на языке Python.
Есть ли доступ из Python к объектной модели MS Excel напрямую без использования готовых инструментов: openpyxl , xlutils.copy и т.д.
Макросы хотел бы делать для Windows и Mac OS. Но если для Mac OS нельзя, то хотя бы для Windows.
Т.е. как я представляю. Я создаю в коде Python экземпляр экселя и работаю с этим экземпляром экселя так: ставлю точку, появляется список членов экселя, я выбираю нужный член, выбираю свойства, методы и т.д.
Я программирую на VBA, поэтом написал про точку, на Python я ещё ни разу не программировал.
Офлайн
ParticipantНе совсем понятно что вы отите. Без готовых инструментов это в машинных кодах писать.
Есть ли доступ из Python к объектной модели MS Excel напрямую без использования готовых инструментов
Офлайн
Конкретной задачи нет. Есть общие задачи: писать макросы для Excel с помощью Python.
Я захожу в Excel - вкладка Разработчик - Надстройки COM - подключаю надстройку, сделанную в Python. На ленте появляется вкладка, на которой кнопки для запуска макросов.
Офлайн
Я не являюсь большим специалистом в exel. Настолько не являюсь что у меня нигде ни на работе ни дома нет микрософт офиса и не на чем проверять утверждения. Но общее представление у меня таково что если в ПО не предусмотрено каких-то возможностей то вставить их можно только написав с нуля это ПО.
И на этот счет у меня стойкое впечатление что Микрософт не предусматривал написание макросов на питоне, и любые попытки писать макросы на питоне будут трудоемки и неудобны. Для макросов есть макросы эксела и VBA.
Вполне возможно что для макросов подойдет любой .net язык. Есть еще одна возможность про которую я забыл написать. Есть .net язык IronPython https://ironpython.net/ На нем по идее можно писать net приложения. Но эта версия катастрофически отстала от жизни (есть только версия 2 поддержка которой прекращена) и не позволяет использовать основные библиотеки, которые естественно компилируемые. По сути это недопитон какойто.
Суть такова что мир .net и микрософт и мир python/gnu/unix практически ортогональны. Инструменты из другого мира выглядят как пятое колесо у телеги когда вы пытаетесь использовать их в текущем мире.
С одной стороны скорее всего приспособить питон для макросов нормально не получится. С другой стороны Я вообще не использую exel и мне трудно представить для чего он бы мог мне понадобиться. Да, я могу взять экселовские файлы и залить из них данные в свои субд. Или провести анализ этих данных. Вы можете сделать тоже самое под windiws.
Но в любом случае эффективно использовать эти инструменты вы сможете только изменив привычные приемы работы (отказавшись от макросов, от привычки запускать эксел и т.п.).
Офлайн
А вот VBA откуда берёт объектную модель Excel'я, интересно? Объектная модель Excel'я ведь не встроена в язык VBA, а где-то находится на компьютере и VBA обращается к этой объектной модели.
А Python не может так сделать, получается?
Офлайн
ParticipantЕксель не понимает пайтон. Увы.Есть вот такая штука :
Я захожу в Excel - вкладка Разработчик - Надстройки COM - подключаю надстройку, сделанную в Python. На ленте появляется вкладка, на которой кнопки для запуска макросов.
[code python][/code]
Отредактировано PEHDOM (Янв. 7, 2021 10:39:46)
Офлайн
PEHDOM, у меня обратная задача: Python должен понять Excel.
Офлайн
Так пайтон его понимает через COM: win32com в общем случае или xlwings/Pyvot/может_еще_чтото для екселя в частности.
Но вызов должен идти со стороны пайтона а не екселя. На пайтне вы не напишете надстройку так, как вы можете это сделать на VBA.
ЗЫ оказалось что xlwings тоже умеет вызывать функции пайтона из екселя.
https://docs.xlwings.org/en/stable/vba.html
Может это пригодиться?
[code python][/code]
Отредактировано PEHDOM (Янв. 7, 2021 10:54:49)
Офлайн
ParticipantА откуда, скажем, браузер берет объектную модель документа? Вы можете управлять HTML документом посредством JS скриптов, примерно тоже самое эксель делает с .xls документом посредством VBA скриптов. Ниоткуда он её не берет, он её сам и создает. Вы открываете документ экселем, эксель его парсит и создает некое внутреннее представление, которое вы можете называть объектной моделью. Это внутренее представление доступно различным частям программы - графическому интерфейсу, математическому просессору, модулю печати и т.д - интерпретатору VBA в том числе. Вряд ли у вас каким-то образом получится расшарить это внутренне представление за пределы программы или расширить её функционал сторонним кодом, если разработчики не предусмотрели такой возможности, а они вряд ли предусмотрели поскольку продукт закрытый и проприетарный.
А вот VBA откуда берёт объектную модель Excel'я, интересно?
Офлайн
ParticipantНе получится, ибо excel заточен под макросы на VBA. Фокус с макросами на питон неплохо удаётся на либре офис. Чтобы сделать такое на либре, насколько помню, надо делать кое-какие финты ушами.
писать макросы для Excel с помощью Python.
Офлайн