【发布时间】:2019-09-25 07:08:35
【问题描述】:
我正在尝试通过在 VBA 宏中调用脚本来从 Excel 运行一个简单的 Python 脚本。每当我从 Spyder 运行脚本时,它都能完美执行。但是,当我使用 VBA 从 Excel 调用脚本时,它会失败。这仅在我将 Numpy 或 Pandas(我没有尝试过其他库)导入脚本时发生。
调用脚本的VBA宏在这里:
Sub RunPythonScript2()
'Declare our variables
Dim RetVal As String
Dim exe As String
Dim python As String
Dim paths As String
exe = "C:\Users\myname\Anaconda3\pythonw.exe"
python = "C:\Users\myname\OneDrive\Reference Documents\Python\Excel and Python\03 Script.py"
paths = """" & exe & """" & " " & """" & python & """"
RetVal = Shell(paths, vbNormalFocus)
End Sub
工作的 Python 脚本在这里:
import win32com.client
excelapp = win32com.client.Dispatch("Excel.Application")
wb = excelapp.Workbooks(1)
sht = wb.Worksheets(1)
sht.Range('A1').Value = "Hello World "
到目前为止一切正常。但是,如果我在 python 脚本中添加一条将 Numpy 或 Pandas 导入的语句,则无法再从 Excel 中成功调用该脚本。但是,我可以从 Spyder 运行脚本并产生预期的结果。
我最初叫python.exe,但是当我使用时:
import sys
print(sys.executable)
我看到 Spyder 正在调用 pythonw.exe。我打电话给python.exe 还是pythonw.exe 似乎都没有关系。
当我导入 Numpy 并运行脚本时,我没有收到任何错误消息。结果是没有任何内容打印到 Excel。
我在 Windows 10 64 位上使用以下软件包版本
- python 版本 3.7.3
- numpy 版本 1.16.2
- pywin32 版本 223
- Anaconda 版本自定义(因为我安装了 xlwings 和 geopandas)
我希望能够将这样的内容打印到 Excel:
sht.Range('A1').Value = np.pi
编辑----------------------------------
我还确认它与 Numpy 有关。我能够在我的 Python 代码中 import sys 没有任何问题,但我仍然遇到 Numpy 和 Pandas 的问题。
其他人已成功运行此代码,所以我怀疑它一定是某种与环境相关的问题。但是,我真的不知道如何管理我的环境。
有关示例,请参阅此 youtube 视频和 cmets: https://www.youtube.com/watch?v=oVNeufjrx8M&list=PLcFcktZ0wnNnf4eh5ObzPzoLFOzTiFVKa&index=6&t=0s
我已尝试全新安装 Anaconda,但问题仍然存在。这是conda info 返回的内容:
active environment : base
active env location : C:\Users\<user>\AppData\Local\Continuum\anaconda3
shell level : 1
user config file : C:\Users\<user>\.condarc
populated config files : C:\Users\<user>\.condarc
conda version : 4.6.14
conda-build version : 3.17.8
python version : 3.7.3.final.0
base environment : C:\Users\<user>\AppData\Local\Continuum\anaconda3 (writable)
channel URLs : https://repo.anaconda.com/pkgs/main/win-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/free/win-64
https://repo.anaconda.com/pkgs/free/noarch
https://repo.anaconda.com/pkgs/r/win-64
https://repo.anaconda.com/pkgs/r/noarch
https://repo.anaconda.com/pkgs/msys2/win-64
https://repo.anaconda.com/pkgs/msys2/noarch
package cache : C:\Users\<user>\AppData\Local\Continuum\anaconda3\pkgs
C:\Users\<user>\.conda\pkgs
C:\Users\<user>\AppData\Local\conda\conda\pkgs
envs directories : C:\Users\<user>\AppData\Local\Continuum\anaconda3\envs
C:\Users\<user>\.conda\envs
C:\Users\<user>\AppData\Local\conda\conda\envs
platform : win-64
user-agent : conda/4.6.14 requests/2.21.0 CPython/3.7.3 Windows/10 Windows/10.0.14393
administrator : False
netrc file : None
offline mode : False
我在家的电脑和工作的电脑上都会出现同样的问题。
【问题讨论】:
-
您用来执行的命令提示符上的可执行行是什么?你可以试试
os.system()函数。 -
我试过你的代码,即使我导入
numpy&Pandas,它在我的系统中也能正常工作 -
@AmazingThingsAroundYou - 我不确定你在问什么。 Windows 命令提示符功能在我的 Shell() 命令的 VBA 代码中给出。你能澄清一下你的意思吗?
-
@Mikku - 其他人也尝试过,并且对他们有用。观看 SigmaCoding 的 youtube 视频和 cmets:youtube.com/…