Использование Python для программирования макросов MS Office?
Недавно я воспринял это как проект, чтобы научить себя программированию на Python. В целом, я должен сказать, что меня это впечатлило.
В прошлом я обычно придерживался программирования в VBA в основном для MS Excel (но также немного в MS Access и Word) и изо всех сил пытался найти способы сделать так, что Python может легко сделать с помощью одной команды.
Мне было интересно, есть ли разумный способ использовать возможности программирования и простоту Python, в то же время использовать различные инструменты в Office (в основном Excel)?
Ответы
Ответ 1
Существует набор кроссплатформенных утилит Python - xlrd, xlwt и xlutils - для чтения и записи файлов Excel. Есть некоторые ограничения (например, я не думаю, что они могут обрабатывать макросы), но они позволяют работать с файлами Excel на платформах, отличных от Windows, если это вам подходит. См.: http://www.python-excel.org/
Кроме того, есть вопросы SO, которые уже относятся к этой теме, в том числе: Есть ли лучший способ (помимо COM) для удаленного управления Excel?
Ответ 2
Да, абсолютно. Вы хотите использовать модуль win32com
, который является частью pywin32 (получить его здесь).
Я нашел, что вы действительно можете упростить интеграцию Python, написав макрос в VBA для использования Python, а затем просто попросите Python вызвать макрос. Он будет выглядеть примерно так:
from win32com.client import Dispatch as comDispatch
xl = comDispatch('Excel.Application')
xl.Workbooks.Open("Macros.xls", False, True)
xl.Run("Macros.xls!Macro_1")
Я уверен, что есть примеры из SO... Как этот.
Ответ 3
Или посмотрите на IronPython. IPy - это собственная .NET-реализация Python 2.6, вы можете найти ее на http://www.codeplex.com/ironpython.
Мы использовали его для нескольких проектов. Вы можете использовать его "снаружи", используя COM или - как и мы, - напишите Excel AddIn с ScriptHost, который вызывает код IronPython, предоставляя вам среду, похожую на VBA.
Будучи .NET dll, IPy очень хорошо интегрируется в современный стек Windows.NET.
Ответ 4
Пакеты xlrd, xlwt и xlutils, упомянутые выше, могут только читать и записывать файлы .xls, размер которых ограничен 65 000 строк и 256 столбцов. Помимо этого, это хороший инструмент.
Но я перешел к другому пакету python-excel, OpenPyXL, который может читать и писать файлы .xlsx. Также я нахожу его простым в использовании, и документация хороша.
OpenPyXL: http://packages.python.org/openpyxl/index.html
Ответ 5
здесь полезная ссылка:
http://continuum.io/using-excel
http://pytools.codeplex.com/wikipage?title=Pyvot
Мне также очень нравится PTVS от того же dev. команда, которая обеспечивает лучшую отладку в Python, которую я испытал до сих пор.
2.
Что вы можете сделать с VBA + Python:
Скомпилируйте скрипты py, которые принимают входы и генерируют выходные данные в виде текстовых файлов или из консоли. Затем VBA подготовит ввод для py, вызовет предварительно скомпилированный py script и вернет его вывод.
3.
Рассмотрим OpenOffice или LibreOffice, которые поддерживают скрипты Python.
Предполагается, что доступные параметры с интерфейсами COM или MS script не удовлетворяют вашим потребностям.
4.
Это не бесплатный подход, но стоит упомянуть (в Forbes и New York Times):
https://datanitro.com
5.
Это не бесплатно для коммерческого использования:
PyXLL - добавление Excel, которое позволяет вызывать функции, написанные на Python, в Excel.
Ответ 6
Это вопрос давным-давно, но я помещаю его здесь, чтобы другие могли указать на него в своем поиске.
Один из вариантов, не обсуждаемый здесь, который я использую все время, заключается в создании COM-сервера с Python и вызове его из VBA в любом приложении Office. Существует хороший учебник по работе с COM-сервером с Python по адресу: http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html
В результате вы получаете COM-сервер (не забудьте сделать это в процессе), который может быть создан путем вызова CreateObject()
в VBA. Затем вы вызываете методы на нем, как и для COM-объекта, созданного с помощью CreateObject()
. Вы не можете сделать один шаг в Python script, но вы можете перехватывать ведение журнала с помощью win32traceutil из дистрибутива Pywin32. Работает безупречно.