簡體   English   中英

從 VBA 調用的 Python 腳本從 Python 調用不工作

[英]Python script called from VBA called from Python is not working

我維護一個帶有宏的 Excel,它可以從互聯網上下載一些數據。 下載在 Python(我將其稱為 Python A)中完成,中間存儲,並再次由 Excel 拾取。 此 Python 流由 Excel 中的宏觸發。 因為我必須在特定時間執行此操作,所以我想通過使用另一個 Python 調度程序來自動執行此操作。 調度程序打開了一個沒什么花哨的東西,以前做過,至少我是這么認為的。 我目前面臨的問題是 Python B 觸發時 Python A 運行不正常。 Excel 宏運行正常。 我知道這是因為正在導出一些文件,這也是在宏中完成的。

到目前為止我已經嘗試過:

  • 手動運行宏沒問題
  • 將所有路徑設置為絕對路徑,但情況已經如此,因此沒有什么可以改進的。
  • 從 bat 文件調用 Python B 流。 確實有效(?!)
  • 從計划的流程中調用 bat不起作用

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM