Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 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

  • Попробуйте Pyvot - Python в/из Excel-коннектора из Microsoft:

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