![](/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.