¿Cómo llamar script Python en Excel VBA?
shell excel-vba (4)
tratando de llamar a un script de python en Vba y soy un newb. Intenté convertir el script principal a un exe usando py2exe y luego llamarlo desde VBA (shell), pero el script principal llama a otros scripts, por lo que se complica y lo estropeé (mi exe no es funcional). Además, el script principal es un archivo grande y no quiero revisarlo mucho.
En pocas palabras, hay una manera de llamar al script principal desde excel vba, sin convertir el script en un archivo exe.
Hasta ahora, he intentado:
RetVal = Shell("C:/python27/python.exe " & "import " & "C://" & "MainScriptFile")
Se inicia python.exe pero no hace nada más. Entonces intenté:
RetVal = Shell("C:/Windows/System32/cmd.exe " & "python " & "C://Python27//hello.py")
Inicia el símbolo del sistema pero ni siquiera inicia python.
PD: revisé todas las preguntas relacionadas en el foro, no solucionaron mi problema.
Hay un par de maneras de resolver este problema.
Pyinx: una herramienta bastante liviana que le permite llamar a Python desde el espacio del proceso de Excel http://code.google.com/p/pyinex/
He usado este hace algunos años (cuando estaba siendo desarrollado activamente) y funcionó bastante bien
Si no te importa pagar, esto se ve bastante bien.
https://datanitro.com/product.html
Aunque nunca lo he usado
¿Aunque si ya está escribiendo en Python, tal vez podría dejar de sobresalir por completo y hacer todo en python puro? Es mucho más fácil mantener una base de código (python) en lugar de 2 (python + cualquier superposición de Excel que tenga).
Si realmente tiene que enviar sus datos a Excel, incluso hay algunas herramientas bastante buenas para eso en Python. Si eso funciona mejor, avísame y obtendré los enlaces.
Prueba esto:
retVal = Shell("python.exe <full path to your python script>", vbNormalFocus)
Reemplace <full path to your python script>
con la ruta completa
Prueba esto:
RetVal = Shell("<full path to python.exe> " & "<full path to your python script>")
O si la secuencia de comandos de python está en la misma carpeta que el libro de trabajo, puede intentar:
RetVal = Shell("<full path to python.exe> " & ActiveWorkBook.Path & "/<python script name>")
Todos los detalles dentro de <>
deben ser dados. <>
- indica campos intercambiables
Supongo que esto debería funcionar. Pero nuevamente, si su script va a llamar a otros archivos que están en carpetas diferentes, puede causar errores a menos que su script lo haya manejado correctamente. Espero eso ayude.
También puede probar ExcelPython que le permite manipular el objeto Python y el código de llamada de VBA.