2010-01-26 75 views
23

Recientemente lo he tomado como un proyecto para enseñarme cómo programar en Python. En general, debo decir que estoy impresionado con eso.¿Usar Python para programar macros de MS Office?

En el pasado normalmente me he pegado a la programación en VBA sobre todo para MS Excel (pero también un poco en MS Access y Word) y he tenido problemas para encontrar maneras de hacer que haga cosas que Python se puede hacer fácilmente con una sola mando.

Me preguntaba si había una forma razonable de aprovechar la potencia de programación y la facilidad de Python, al mismo tiempo que utilizo las diversas herramientas en Office (principalmente Excel)?

+1

Siempre me pregunté si era posible hacer una lista/dicts a filas/columnas o incluir numpy y excel, o quizás pyqt + numpy como complemento de Excel – dassouki

+0

Ver http://stackoverflow.com/questions/441758/driving- excel-from-python-in-windows/445961 # 445961 – codeape

+0

Esto es toda una gran información, definitivamente me da una dirección (en realidad más de uno) para entrar. No pude encontrar ninguna respuesta similar en otro lugar en SO, pero obviamente no estaba usando las palabras clave correctas. – Jesse

Respuesta

7

Existe un conjunto de utilidades de plataforma multiplataforma, llamadas xlrd, xlut y xlutils, para leer & escribiendo archivos de Excel. Existen algunas limitaciones (por ejemplo, no creo que puedan procesar macros), pero sí le permiten trabajar con archivos de Excel en plataformas que no son de Windows, si eso le sirve. Ver: http://www.python-excel.org/

Además, hay cuestiones que ya se ocupan de este tipo de tema, incluyendo lo siguiente: Is there a better way (besides COM) to remote-control Excel?

18

Sí, absolutamente. Desea utilizar el módulo win32com, que es parte de pywin32 (get it here).

He encontrado que realmente puede simplificar la integración de Python al escribir una macro en VBA para que Python la use, y luego hacer que Python llame a la macro. Se verá algo como esto:

from win32com.client import Dispatch as comDispatch 

xl = comDispatch('Excel.Application') 
xl.Workbooks.Open("Macros.xls", False, True) 
xl.Run("Macros.xls!Macro_1") 

Estoy seguro de que hay abundancia de ejemplos en SO ... Como this one.

7

O echa un vistazo a IronPython. IPy es una implementación .NET nativa de Python 2.6, puedes encontrarla en http://www.codeplex.com/ironpython.

Lo hemos usado para varios proyectos. Puedes usarlo "desde afuera" usando COM o, como hacemos, escribir un AddIn de Excel con ScriptHost, que llama al código de IronPython para darte un entorno similar a VBA.

Al ser .NET dll, IPy se integra muy bien en la moderna pila .NET de Windows.

+0

También creo que esta es en realidad la mejor solución. Si sigue esta ruta, puede descargar [Visual Studio Shell (integrado)] (http://www.microsoft.com/downloads/en/details.aspx?FamilyID=8e5aa7b6-8436-43f0-b778-00c3bca733d3&displaylang=en) de forma gratuita y luego descargar las [herramientas de Iron Python] (http://ironpython.net/tools/) para Visual Studio. – oob

+0

Sé que esto está fechado, pero ¿podría dar algunos ejemplos? – jhexp

4

El XLRD, xlwt y paquetes xlutils mencionados anteriormente sólo pueden leer y escribir archivos .xls que tienen limitaciones de tamaño de 65,000 filas y 256 columnas. Aparte de eso, es una buena herramienta.

Pero he pasado a otro paquete python-excel, OpenPyXL, que puede leer y escribir archivos .xlsx. También me resulta fácil de usar y la documentación es buena.

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

2

Aquí hay un enlace útil:

http://continuum.io/using-excel

  1. Trate Pyvot - Un pitón a/desde el conector de Excel de Microsoft:

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

También me gustan los PTVS del mismo desarrollador.equipo, que proporciona la mejor depuración en Python que he experimentado hasta ahora.

2.

Lo que puede hacer con VBA + Python es el siguiente:

compilar sus guiones py que tienen entradas y salidas generan como archivos de texto o de consola. Luego, VBA preparará la entrada para py, llamará al script py precompilado y leerá su resultado.

3.

Considere OpenOffice o LibreOffice que soportan los scripts de Python.

Esto supone que las opciones disponibles con las interfaces de script COM o MS no satisfacen sus necesidades.

4.

Este enfoque no es libre, pero vale la pena mencionar (que aparece en Forbes y The New York Times):

https://datanitro.com

5.

Esto no es libre para comercial use:

PyXLL - complemento de Excel que permite llamar a las funciones escritas en Python en Excel.

1

Esta es una pregunta de hace mucho tiempo, pero la estoy poniendo aquí para que otros puedan señalarla en su búsqueda.

Una opción no tratada aquí, que uso todo el tiempo, es crear un servidor COM de Python y llamarlo desde VBA en cualquier aplicación de Office. Hay un buen tutorial de hacer servidor COM con Python en: http://timgolden.me.uk/pywin32-docs/html/com/win32com/HTML/QuickStartServerCom.html

Lo que termina es un servidor COM (no olvides hacerlo en proceso) que se puede crear llamando a CreateObject() en VBA. A continuación, llama a los métodos como lo hace con un objeto COM creado con CreateObject(). No puede hacer un solo paso en su script de Python, pero puede interceptar el registro con win32traceutil desde la distribución de Pywin32. Funciona perfectamente.

Cuestiones relacionadas