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

Т.е. как я представляю. Я создаю в коде Python экземпляр экселя и работаю с этим экземпляром экселя так: ставлю точку, появляется список членов экселя, я выбираю нужный член, выбираю свойства, методы и т.д.
Я программирую на VBA, поэтом написал про точку, на Python я ещё ни разу не программировал.
doza_and
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 интерфейс человеку знакомому с питоном непонятно.
Если конкретнее напишете что именно надо то может какие мысли возникнут.



Participant
Конкретной задачи нет. Есть общие задачи: писать макросы для Excel с помощью Python.
Я захожу в Excel - вкладка Разработчик - Надстройки COM - подключаю надстройку, сделанную в Python. На ленте появляется вкладка, на которой кнопки для запуска макросов.
doza_and
Я не являюсь большим специалистом в exel. Настолько не являюсь что у меня нигде ни на работе ни дома нет микрософт офиса и не на чем проверять утверждения. Но общее представление у меня таково что если в ПО не предусмотрено каких-то возможностей то вставить их можно только написав с нуля это ПО.

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

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

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

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

Но в любом случае эффективно использовать эти инструменты вы сможете только изменив привычные приемы работы (отказавшись от макросов, от привычки запускать эксел и т.п.).
Participant
А вот VBA откуда берёт объектную модель Excel'я, интересно? Объектная модель Excel'я ведь не встроена в язык VBA, а где-то находится на компьютере и VBA обращается к этой объектной модели.
А Python не может так сделать, получается?
PEHDOM
Participant
Я захожу в Excel - вкладка Разработчик - Надстройки COM - подключаю надстройку, сделанную в Python. На ленте появляется вкладка, на которой кнопки для запуска макросов.
Ексель не понимает пайтон. Увы.Есть вот такая штука :
https://sourceforge.net/projects/excelpython/

Это надстройка для ексель с помощью которой можна вызывать функции написанные на python прямо из Excel. но она уже лет 5 как неактивна.ХЗ почему, может автор забил, а может посчитал что все работает и ПО не нуждаеться более в доработке. Посмотрите может вас устроит.
Participant
PEHDOM, у меня обратная задача: Python должен понять Excel.
PEHDOM
Так пайтон его понимает через COM: win32com в общем случае или xlwings/Pyvot/может_еще_чтото для екселя в частности.
Но вызов должен идти со стороны пайтона а не екселя. На пайтне вы не напишете надстройку так, как вы можете это сделать на VBA.

ЗЫ оказалось что xlwings тоже умеет вызывать функции пайтона из екселя.
https://docs.xlwings.org/en/stable/vba.html
Может это пригодиться?
FishHook
Participant
А вот VBA откуда берёт объектную модель Excel'я, интересно?
А откуда, скажем, браузер берет объектную модель документа? Вы можете управлять HTML документом посредством JS скриптов, примерно тоже самое эксель делает с .xls документом посредством VBA скриптов. Ниоткуда он её не берет, он её сам и создает. Вы открываете документ экселем, эксель его парсит и создает некое внутреннее представление, которое вы можете называть объектной моделью. Это внутренее представление доступно различным частям программы - графическому интерфейсу, математическому просессору, модулю печати и т.д - интерпретатору VBA в том числе. Вряд ли у вас каким-то образом получится расшарить это внутренне представление за пределы программы или расширить её функционал сторонним кодом, если разработчики не предусмотрели такой возможности, а они вряд ли предусмотрели поскольку продукт закрытый и проприетарный.
Rafik
Participant
писать макросы для Excel с помощью Python.
Не получится, ибо excel заточен под макросы на VBA. Фокус с макросами на питон неплохо удаётся на либре офис. Чтобы сделать такое на либре, насколько помню, надо делать кое-какие финты ушами.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB