![](/img/trans.png)
[英]Why is this python script not working properly when called from MATLAB?
[英]Python script called from VBA called from Python is not working
我维护一个带有宏的 Excel,它可以从互联网上下载一些数据。 下载在 Python(我将其称为 Python A)中完成,中间存储,并再次由 Excel 拾取。 此 Python 流由 Excel 中的宏触发。 因为我必须在特定时间执行此操作,所以我想通过使用另一个 Python 调度程序来自动执行此操作。 调度程序打开了一个没什么花哨的东西,以前做过,至少我是这么认为的。 我目前面临的问题是 Python B 触发时 Python A 运行不正常。 Excel 宏运行正常。 我知道这是因为正在导出一些文件,这也是在宏中完成的。
到目前为止我已经尝试过:
VBA 中的代码:
cmdLine = "python ""path_with_spaces_to_file"" "
lngResult = ShellAndWait(cmdLine, 0, vbNormalFocus, AbandonWait)
Python B 中的代码调用宏:
import win32com.client
def func():
filename_excel = r"filename_to_excel_with_spaces.xlsm"
xl = win32com.client.DispatchEx('Excel.Application')
xl.Visible = False
xl.Workbooks.Open(Filename=filename_excel, ReadOnly=1)
sheet = xl.ActiveWorkbook.Sheets("Sheetname")
xl.Application.Run("Macroname")
xl.DisplayAlerts = False
xl.Application.Quit()
我如何从调度程序调用这个 function:
subprocess.run(["python3_location.bat", "-c", 'from python_B_file import func; func()'],
stdout=subprocess.PIPE,
cwd=r"path_to_python_B_file",
universal_newlines=True,
timeout=60)
我看到一个额外的 cmd window 弹出,但没有下载新文件。 我看不到错误消息
尝试不同的东西,我发现在正常命名空间中,命令python
是指系统默认安装 Python 2.7,而 Python B 是。 Python 代码与 Python 3 不兼容(与 urllib 的东西,很容易解决在 Python 版本中工作的东西)。 从 Python B 调用 Excel 宏以某种方式更改了命名空间,并且ShellAndWait
命令引用了 Python 3.7。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.