recognized - run python in cmd
Conducir Excel desde Python en Windows (7)
Escribí una clase de python que permite trabajar con Excel a través de la interfaz COM en Windows http://sourceforge.net/projects/excelcomforpython/
La clase usa win32com para interactuar con Excel. Puede usar la clase directamente o usarla como ejemplo. Muchas opciones implementadas como fórmulas de matriz, formato condicional, gráficos, etc.
Tenemos varias hojas de cálculo que emplean macros deliciosamente complicadas y extensiones de terceros para producir modelos complicados. Estoy trabajando en un proyecto que implica modificar ligeramente varias entradas y ver los resultados. En lugar de hacer esto a mano o escribir VBA, me gustaría ver si puedo escribir un script de Python para manejar esto. En otras palabras, la secuencia de comandos python se iniciará, cargará la hoja de Excel y luego interactuará con la hoja haciendo pequeños cambios en algunas celdas y viendo cómo afectan a otras celdas.
Entonces, mi pregunta es doble:
¿Cuál es la mejor biblioteca que se puede usar para conducir Excel desde Python de esa manera?
¿Dónde está la mejor documentación / ejemplos sobre el uso de dicha biblioteca?
Saludos, / YGA
Existe un proyecto interesante para integrar python en excel como una DLL en proceso que se puede encontrar en:
http://opentradingsystem.com/PythonForExcel/main.html
Otro proyecto algo más simple a lo largo de la misma idea existe en:
http://www.codeproject.com/Articles/639887/Calling-Python-code-from-Excel-with-ExcelPython
Estos proyectos parecen tener muchas promesas, pero necesitan más desarrollo.
He pasado alrededor de una semana, y aquí está mi implementación (o más bien prueba de concepto): https://github.com/Winand/SimplePython
La idea principal es hacer que el código de Python sea tan fácil de escribir y llamar desde Microsoft Office como macros de VBA (he creado Add-In solo para Excel).
- Arquitectura cliente-servidor (a través de TCP), por lo que Python solo se inicia una vez
- El servidor se inicia automáticamente si no se está ejecutando
- El servidor vuelve a cargar automáticamente los módulos de macro cuando el usuario los cambia
- Interfaz de control fácil de usar en cinta de Office
Lo hice usando pywin32 . No es una experiencia particularmente agradable, ya que no hay realmente ninguna abstracción; es como usar VBA, pero con la sintaxis de Python. No puede confiar en las cadenas de documentos, por lo que querrá tener a mano la referencia de MSDN Excel ( http://msdn.microsoft.com/en-us/library/aa220733.aspx es lo que utilicé, si no recuerdo mal). Debería poder encontrar los documentos de Excel 2007 si excavar un poco).
Vea here para un simple ejemplo.
from win32com.client import Dispatch
xlApp = Dispatch("Excel.Application")
xlApp.Visible = 1
xlApp.Workbooks.Add()
xlApp.ActiveSheet.Cells(1,1).Value = ''Python Rules!''
xlApp.ActiveWorkbook.ActiveSheet.Cells(1,2).Value = ''Python Rules 2!''
xlApp.ActiveWorkbook.Close(SaveChanges=0) # see note 1
xlApp.Quit()
xlApp.Visible = 0 # see note 2
del xlApp
¡Buena suerte!
Mira el proyecto DataNitro (nombre anterior IronSpread). Es un complemento de Python para Excel.
Para controlar Excel, use pywin32, como sugiere @igowen.
Tenga en cuenta que es posible usar el envío estático. Use makepy.py
del proyecto pywin32 para crear un módulo python con los wrappers de Python. El uso de los contenedores generados simplifica el desarrollo, ya que, por ejemplo, ipython le proporciona la terminación de pestañas y ayuda durante el desarrollo.
Ejemplo de envío estático:
x:> makepy.py "Microsoft Excel 11.0 Object Library" ... Generating... Importing module x:> ipython
> from win32com.client import Dispatch
> excel = Dispatch("Excel.Application")
> wb = excel.Workbooks.Append()
> range = wb.Sheets[0].Range("A1")
> range.[Press Tab]
range.Activate range.Merge
range.AddComment range.NavigateArrow
range.AdvancedFilter range.NoteText
...
range.GetOffset range.__repr__
range.GetResize range.__setattr__
range.GetValue range.__str__
range.Get_Default range.__unicode__
range.GoalSeek range._get_good_object_
range.Group range._get_good_single_object_
range.Insert range._oleobj_
range.InsertIndent range._prop_map_get_
range.Item range._prop_map_put_
range.Justify range.coclass_clsid
range.ListNames range.__class__
> range.Value = 32
...
Enlaces de documentación:
- El libro O''Reilly Python Programming en Win32 tiene un capítulo Integración con Excel .
- Mismo libro, capítulo de muestra gratuita Advanced Python y COM cubren makepy en detalle.
- Tutorials
- documentación de win32com , le sugiero que lea this primero.
Trabajé en un proyecto hogareño el año pasado que involucra a un cliente escrito como un complemento de Python Excel. El proyecto es esencialmente una base de datos en línea simplificada para el acceso del usuario final. El complemento de Excel permite a los usuarios consultar datos de la base de datos para mostrarlos en Excel.
Nunca llegué muy lejos con el complemento de Excel y mi código es un poco feo. Pero, lo que sí tengo es bajo una licencia BSD y está disponible a través de Bazar en
http://www.launchpad.net/analyz/trunk
El cliente no funcionará, ya que no tengo un servidor público funcionando en este momento, pero al menos puede ver lo que hice con el código para obtener algunas ideas sobre cómo podría funcionar. El código también le mostrará cómo crear un cuadro de diálogo MFC en 100% Python.