Использование Python для программирования макросов MS Office? - PullRequest
26 голосов
/ 26 января 2010

Я недавно воспринял это как проект, чтобы научиться программировать на Python. В целом, я должен сказать, что впечатлен этим.

В прошлом я обычно придерживался программирования на VBA в основном для MS Excel (но также немного в MS Access и Word) и изо всех сил пытался найти способы заставить его делать то, что Python может легко сделать с помощью одной команды .

Мне было интересно, есть ли разумный способ использовать возможности программирования и простоту Python, и в то же время использовать различные инструменты Office (в основном, Excel)?

Ответы [ 6 ]

22 голосов
/ 26 января 2010

Да, абсолютно. Вы хотите использовать модуль 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 есть множество примеров ... Например, этот .

8 голосов
/ 27 января 2010

Существует набор кроссплатформенных утилит Python - xlrd, xlwt и xlutils - для чтения и записи файлов Excel. Есть некоторые ограничения (например, я не думаю, что они могут обрабатывать макросы), но они позволяют вам работать с файлами Excel на платформах, отличных от Windows, если это вам полезно. См .: http://www.python -excel.org /

Кроме того, есть ТАК вопросы, уже касающиеся этой темы, в том числе: Есть ли лучший способ (кроме COM) для удаленного управления Excel?

7 голосов
/ 27 января 2010

Или взгляните на IronPython. IPy является нативной .NET-реализацией Python 2.6, ее можно найти по адресу http://www.codeplex.com/ironpython.

Мы использовали его для нескольких проектов. Вы можете использовать его «извне» с помощью COM или - как мы это делаем - написать Excel AddIn с ScriptHost, который вызывает код IronPython, предоставляя вам среду, похожую на VBA.

Будучи dll .NET, IPy чрезвычайно хорошо интегрируется в современный стек Windows .NET.

4 голосов
/ 26 сентября 2011

Упомянутые выше пакеты xlrd, xlwt и xlutils могут только читать и записывать файлы .xls с ограничением размера в 65 000 строк и 256 столбцов.Кроме того, это хороший инструмент.

Но я перешел к другому пакету python-excel, OpenPyXL, который может читать и записывать файлы .xlsx.Также я нахожу это простым в использовании, и документация хороша.

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

3 голосов
/ 13 октября 2013

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

http://continuum.io/using-excel

  1. Попробуйте Pyvot - Python в / из Excel Connector от Microsoft:

http://pytools.codeplex.com/wikipage?title=Pyvot

Мне также очень нравятся PTVS от того же разработчика. команда, которая обеспечивает лучшую отладку в 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, позволяющая вызывать функции, написанные на Python, в Excel.

2 голосов
/ 07 апреля 2015

Это вопрос давным-давно, но я помещаю его здесь, чтобы другие могли указать на него в своих поисках.

Один вариант, который здесь не обсуждается, которым я пользуюсь все время, - это создание 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. Работает без нареканий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...