Использование Python для программирования макросов MS Office?
недавно я взял его в качестве проекта, чтобы научить себя программировать на Python. В целом, должен сказать, Я впечатлен.
в прошлом я обычно придерживался программирования в VBA в основном для MS Excel (но также немного в MS Access и Word) и изо всех сил пытался найти способы заставить его делать то, что Python может легко сделать с помощью одной команды.
Мне было интересно, есть ли разумный способ использовать силу программирования и легкость Python в то время как на в то же время использовать различные инструменты в Office (в основном Excel)?
6 ответов
существует набор кросс-платформенных утилит Python - xlrd, xlwt и xlutils-для чтения и записи файлов Excel. Есть некоторые ограничения (например, я не думаю, что они могут обрабатывать макросы), но они позволяют работать с файлами Excel на платформах, отличных от Windows, если это приносит вам пользу. Смотри:http://www.python-excel.org/
кроме того, есть вопросы, которые уже касаются такого рода темы, включая это: есть ли лучший способ (кроме COM) для дистанционного управления Excel?
Да, абсолютно. Вы хотите использовать 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")
Я уверен, что есть много примеров на это... Как этот.
или посмотрите на IronPython. IPy-это собственная .NET-реализация Python 2.6, вы можете найти ее вhttp://www.codeplex.com/ironpython.
мы использовали его для нескольких проектов. Вы можете использовать его "извне", используя COM или - как и мы - написать дополнение Excel со скриптом, который вызывает код IronPython, давая вам среду, подобную VBA.
будучи .NET dll, IPy очень хорошо интегрируется в современную Windows .NET стек.
пакеты xlrd, xlwt и xlutils, упомянутые выше, могут только читать и писать .XLS файлы, которые имеют ограничения по размеру 65,000 строк и 256 столбцов. Кроме того, это хороший инструмент.
но я перешел к другому пакету python-excel, OpenPyXL, который может читать и писать .xlsx файлы. Также я нахожу его простым в использовании и документация хорошая.
вот полезная ссылка:
http://continuum.io/using-excel
попробуйте Pyvot-Python to / from Excel Connector от Microsoft:
http://pytools.codeplex.com/wikipage?title=Pyvot
Мне также очень нравятся PTVS от того же dev. команда, которая обеспечивает лучшую отладку в Python, которую я испытал до сих пор.
2.
Что вы можете сделать с VBA + Python идет следом:
скомпилируйте скрипты py, которые принимают входы и генерируют выходы в виде текстовых файлов или из консоли. Затем VBA подготовит ввод для py, вызовет предварительно скомпилированный скрипт py и прочитает его вывод.
3.
рассмотрим OpenOffice или LibreOffice, которые поддерживают скрипты Python.
Это предполагает, что доступные параметры с интерфейсами сценариев COM или MS не удовлетворяют вашим потребностям.
4.
Это не бесплатно подход, но стоит упомянуть (показан в Forbes и New York Times):
5.
Это не бесплатно для коммерческого использования:
PyXLL - Excel addin, который позволяет вызывать функции, написанные на Python, в Excel.
это вопрос давным-давно, но я помещаю его здесь, чтобы другие могли указать на него в своем поиске.
один из вариантов, не обсуждаемых здесь, который я использую все время, - создать COM-сервер из Python и вызвать его из VBA в любом приложении Office. Существует хороший учебник по работе с COM-сервером с Python по адресу: http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html
в конечном итоге вы получаете COM-сервер (не забудьте сделать это в процессе), который может быть создан вызовом CreateObject()
в VBA. Затем вы вызываете методы на нем, как с COM-объектом, созданным с помощью CreateObject()
. Вы не можете выполнить один шаг в скрипте Python, но вы можете перехватить ведение журнала с помощью win32traceutil из дистрибутива Pywin32. Работать безупречно.