2014-06-30 92 views
0

Excel的COM庫我想這樣做的以下Excel的VBA代碼,相當於在Python - COMKERNEL32通過在Python

Private Declare Function SetDllDirectory Lib "kernel32.dll" Alias "SetDllDirectoryA" (_ 
    ByVal lpPathName As String) As Boolean 

所以,現在在Excel VBA中,我可以叫SetDllDirectory(dllPath)

MSDN SetDllDirectory會:http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686203(v=vs.85).aspx

在另一方面,在Python,使用win32com:

import win32com.client 
xlapp = win32com.client.DispatchEx("Excel.Application") 

我該怎麼做類似xlapp.SetDllDirectory(dllPath)(顯然這是無效的,因此這個問題)?

我也試過ctypes.windll.kernel32.SetDllDirectoryA但是這隻設置Python的DLL目錄,而不是xlapp(被COM操作的Excel實例)。

更多細節:本質上,我這樣做是因爲我嘗試將XLL動態加載到Excel(xlapp.RegisterXLL)中。但是這個特殊的xll文件需要一個駐留在特定路徑中的dll。因此我希望能夠設置DLL路徑。

非常感謝! Kris

+0

您是否嘗試過從Python腳本內設置PATH?我會想象COM進程與客戶端運行的環境相同,但我現在沒有辦法檢查。 – Schollii

回答

1

假設您的代碼使用PyXLL在Excel中運行,那麼使用os.environ設置路徑應該可以滿足您的需求。

os.environ["PATH"] += ";" + dllpath 

如果你只是使用win32com獲得當前正在運行Excel應用程序,那麼它不會那麼容易改變它的路徑,但也許你可以只捆綁了DLL依賴到同一個文件夾中改爲xll。