2010-01-26 3 views
23

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

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

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

+1

Я всегда задавался вопросом, возможно ли выполнять список/dicts для строк/столбцов или включать numpy и excel, или, возможно, pyqt + numpy как excel addin – dassouki

+0

См. Http://stackoverflow.com/questions/441758/driving- excel-from-python-in-windows/445961 # 445961 – codeape

+0

Это отличная информация, это определенно дает мне направление (на самом деле более одного). Я не мог найти никаких подобных ответов в другом месте на SO, но, очевидно, не использовал правильные ключевые слова. – Jesse

ответ

7

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

Кроме того, есть SO вопросы уже дело с такого рода темы, в том числе это: Is there a better way (besides COM) to remote-control Excel?

18

Да, абсолютно. Вы хотите использовать модуль win32com, который является частью pywin32 (get it here).

Я нашел, что вы действительно можете упростить интеграцию 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") 

Я уверен, что есть plently примеров на SO ... Как this one.

7

Или посмотрите на IronPython. IPy - это собственная .NET-версия Python 2.6, вы можете найти ее на http://www.codeplex.com/ironpython.

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

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

+0

Я также считаю, что это на самом деле лучшее решение. Если вы пройдете этот маршрут, вы можете загрузить [Visual Studio Shell (интегрированный)] (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8e5aa7b6-8436-43f0-b778-00c3bca733d3&displaylang=en) бесплатно, а затем загрузить [iron python tools] (http://ironpython.net/tools/) для визуальной студии. – oob

+0

Я знаю, что это датируется, но не могли бы вы привести несколько примеров? – jhexp

4

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

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

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

2

здесь полезная ссылка:

http://continuum.io/using-excel

  1. Попробуйте Pyvot - Python, в/из соединителя Excel от 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 addin, позволяющий вызывать функции, написанные на Python, в Excel.

1

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

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

Смежные вопросы