Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2021 12:40:45

Participant
Зарегистрирован: 2021-01-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Здравствуйте. Хочу делать com-надстройки для MS Excel на языке Python.
Есть ли доступ из Python к объектной модели MS Excel напрямую без использования готовых инструментов: openpyxl , xlutils.copy и т.д.
Макросы хотел бы делать для Windows и Mac OS. Но если для Mac OS нельзя, то хотя бы для Windows.

Т.е. как я представляю. Я создаю в коде Python экземпляр экселя и работаю с этим экземпляром экселя так: ставлю точку, появляется список членов экселя, я выбираю нужный член, выбираю свойства, методы и т.д.
Я программирую на VBA, поэтом написал про точку, на Python я ещё ни разу не программировал.

Офлайн

#2 Янв. 6, 2021 17:23:31

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Participant
Есть ли доступ из Python к объектной модели MS Excel напрямую без использования готовых инструментов
Не совсем понятно что вы отите. Без готовых инструментов это в машинных кодах писать.
Никакой поддержки эксела или com в ядре языка питон нету (как думаю и в любых других языках кроме скриптов эксела).
Есть множества разных библиотек: openxls,xlrd,win32com,xlutils,…
У всех есть плюсы и минусы

win32com дает доступ к com интерфейсам. ТОЛЬКО под OS windows Я очень сильно сомневаюсь что под macOS вообще есть com интерфейсы к приложениям.
При этом com интерфейс ЖУТКО медленный.

openxls,xlutils и т.п. просто читают и модифицируют файлы xlsx Они быстрые и кроссплатформенные.

Третий вариант - PythonUNO из libreoffice - Он кросспатформенный, но понимать будет то, что понимает либра. Очевидно там нет 100% совместимости. (никогда им не пользовался).

На практике получается так что в 99.9% случаев используются библиотеки типа openxls. Для каких задачек автоматизации нужен com интерфейс человеку знакомому с питоном непонятно.
Если конкретнее напишете что именно надо то может какие мысли возникнут.





Офлайн

#3 Янв. 6, 2021 17:27:49

Participant
Зарегистрирован: 2021-01-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Конкретной задачи нет. Есть общие задачи: писать макросы для Excel с помощью Python.
Я захожу в Excel - вкладка Разработчик - Надстройки COM - подключаю надстройку, сделанную в Python. На ленте появляется вкладка, на которой кнопки для запуска макросов.

Офлайн

#4 Янв. 6, 2021 22:38:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Я не являюсь большим специалистом в exel. Настолько не являюсь что у меня нигде ни на работе ни дома нет микрософт офиса и не на чем проверять утверждения. Но общее представление у меня таково что если в ПО не предусмотрено каких-то возможностей то вставить их можно только написав с нуля это ПО.

И на этот счет у меня стойкое впечатление что Микрософт не предусматривал написание макросов на питоне, и любые попытки писать макросы на питоне будут трудоемки и неудобны. Для макросов есть макросы эксела и VBA.

Вполне возможно что для макросов подойдет любой .net язык. Есть еще одна возможность про которую я забыл написать. Есть .net язык IronPython https://ironpython.net/ На нем по идее можно писать net приложения. Но эта версия катастрофически отстала от жизни (есть только версия 2 поддержка которой прекращена) и не позволяет использовать основные библиотеки, которые естественно компилируемые. По сути это недопитон какойто.

Суть такова что мир .net и микрософт и мир python/gnu/unix практически ортогональны. Инструменты из другого мира выглядят как пятое колесо у телеги когда вы пытаетесь использовать их в текущем мире.

С одной стороны скорее всего приспособить питон для макросов нормально не получится. С другой стороны Я вообще не использую exel и мне трудно представить для чего он бы мог мне понадобиться. Да, я могу взять экселовские файлы и залить из них данные в свои субд. Или провести анализ этих данных. Вы можете сделать тоже самое под windiws.

Но в любом случае эффективно использовать эти инструменты вы сможете только изменив привычные приемы работы (отказавшись от макросов, от привычки запускать эксел и т.п.).



Офлайн

#5 Янв. 7, 2021 09:23:12

Participant
Зарегистрирован: 2021-01-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

А вот VBA откуда берёт объектную модель Excel'я, интересно? Объектная модель Excel'я ведь не встроена в язык VBA, а где-то находится на компьютере и VBA обращается к этой объектной модели.
А Python не может так сделать, получается?

Офлайн

#6 Янв. 7, 2021 10:36:15

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Participant
Я захожу в Excel - вкладка Разработчик - Надстройки COM - подключаю надстройку, сделанную в Python. На ленте появляется вкладка, на которой кнопки для запуска макросов.
Ексель не понимает пайтон. Увы.Есть вот такая штука :
https://sourceforge.net/projects/excelpython/

Это надстройка для ексель с помощью которой можна вызывать функции написанные на python прямо из Excel. но она уже лет 5 как неактивна.ХЗ почему, может автор забил, а может посчитал что все работает и ПО не нуждаеться более в доработке. Посмотрите может вас устроит.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 7, 2021 10:39:46)

Офлайн

#7 Янв. 7, 2021 10:38:19

Participant
Зарегистрирован: 2021-01-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

PEHDOM, у меня обратная задача: Python должен понять Excel.

Офлайн

#8 Янв. 7, 2021 10:44:29

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Так пайтон его понимает через COM: win32com в общем случае или xlwings/Pyvot/может_еще_чтото для екселя в частности.
Но вызов должен идти со стороны пайтона а не екселя. На пайтне вы не напишете надстройку так, как вы можете это сделать на VBA.

ЗЫ оказалось что xlwings тоже умеет вызывать функции пайтона из екселя.
https://docs.xlwings.org/en/stable/vba.html
Может это пригодиться?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 7, 2021 10:54:49)

Офлайн

#9 Янв. 7, 2021 11:03:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Participant
А вот VBA откуда берёт объектную модель Excel'я, интересно?
А откуда, скажем, браузер берет объектную модель документа? Вы можете управлять HTML документом посредством JS скриптов, примерно тоже самое эксель делает с .xls документом посредством VBA скриптов. Ниоткуда он её не берет, он её сам и создает. Вы открываете документ экселем, эксель его парсит и создает некое внутреннее представление, которое вы можете называть объектной моделью. Это внутренее представление доступно различным частям программы - графическому интерфейсу, математическому просессору, модулю печати и т.д - интерпретатору VBA в том числе. Вряд ли у вас каким-то образом получится расшарить это внутренне представление за пределы программы или расширить её функционал сторонним кодом, если разработчики не предусмотрели такой возможности, а они вряд ли предусмотрели поскольку продукт закрытый и проприетарный.



Офлайн

#10 Янв. 7, 2021 16:08:25

Rafik
Зарегистрирован: 2018-09-04
Сообщения: 231
Репутация: +  27  -
Профиль   Отправить e-mail  

Использование объектной модели MS Excel в Python.

Participant
писать макросы для Excel с помощью Python.
Не получится, ибо excel заточен под макросы на VBA. Фокус с макросами на питон неплохо удаётся на либре офис. Чтобы сделать такое на либре, насколько помню, надо делать кое-какие финты ушами.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version