Использование 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 файлы. Также я нахожу его простым в использовании и документация хорошая.

OpenPyXL:http://packages.python.org/openpyxl/index.html


вот полезная ссылка:

http://continuum.io/using-excel

  1. попробуйте 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):

https://datanitro.com

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. Работать безупречно.