简体   繁体   中英

Can't run Python from Excel (xlwings)

I'm quite new to xlwings and I'm runing code from VBA in order to excecute a python script that writes some text in Excel.

The problem is when I run the VBA code, it seems to excecute python but my excel sheet doesn't change. However, if I run the python script from python, it works just fine, even if the Excel file is already open.

VBA code is the following:

Sub Botón1()
Dim obj As Object
Dim pyexe, pyscript As String

Set obj = VBA.CreateObject("Wscript.Shell")
pyexe = """C:\Users\xxx\AppData\Local\Programs\Python\Python36-32\python.exe"""
pyscript = "C:\Users\xxx\Documents\Prueba.py"

obj.Run pyexe & pyscript, 1, True
End Sub

And python code is the following:

import xlwings as xw

wb = xw.Book('Libro1.xlsm')
sht = wb.sheets['Hoja1']
sht.range('A1').value = 'Hi!'

Both files (Libro1.xlsm and Prueba.py) are saved inside the same folder. When I run excel macro it opens the cmd prompt but nothing happens in Excel spreasheet. I have not installed xlwings add in, but I believe it is not necessary to do it, in order to do what I'm trying to do.

Can you please help me find what could be wrong?

I was reading this article: https://devblogs.microsoft.com/scripting/how-can-i-get-the-command-window-to-stay-open-after-running-a-command-line-tool/

And it explains using.run is equivalent to calling Cmd.exe. If I open cmd I just need to write my python file name with.py extension to run it. So I figured out "pyexe" is not necessary.

The solution:

Sub Botón1_Haga_clic_en()
Dim obj As Object

Set obj = CreateObject("Wscript.Shell")
obj.Run "C:\Users\xxx\Documents\Prueba.py", 1, True

End Sub

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM