#發問 通過PHP的proc_open函式使用Python的win32com.client庫會失敗
大家好,前幾天我把Server的Windows語系從日語改成美國,結果出了一些問題。
我在Server上使用xampp的Apachi架設了一個網站,一切都很正常,我用PHP的proc_open函式呼叫Python的win32com.client庫對Word進行操作。然而,當我改變系統語系後,突然間出現了一些異常情況。
我已經把Windows語系從美國改回日本,但問題仍然存在。
具體異常情況如下,以下是Python的代碼。
**************************************************
word = win32com.client.DispatchEx('Word.Application')
word.Visible = False
word.DisplayAlerts = False
doc = word.Documents.Open(os.path.join(releasenotice_folder, line))
if doc == None:
print(f"Error: Module3的「物件:{type(word)}/檔案:{os.path.join(releasenotice_folder, line)}」開啟失敗。")
return
else:
doc.SaveAs(word_ReleaseNoticePath, FileFormat=17)
doc.Close()
word.Quit()
break
**************************************************
我的目標是將Word轉換成pdf,但問題出在Word物件的創建階段。
執行完「word = win32com.client.DispatchEx('Word.Application')」時,並不會有任何錯誤,但當我使用print(type(word))時,結果是空的。
以下是已經測試過的項目
1. 重新安裝xampp。
2. 重新安裝office。
3. 重新安裝python跟PyWin32 庫。
4. 在Server直接執行Python創建物件並顯示類型,可以正常「<class 'win32com.client.CDispatch'>」。
5. 檢查COM權限,添加Everyone權限。
6. 重啟動Server。
7. 在PHP的「$process = proc_open("python " . $scriptPath, $descriptorspec, $pipes);」前面先設定環境變數。
由於這次的異常並未在創建 win32com.client 物件時發生,而是在後續對物件進行寫入或儲存時才出現,這使得我難以確切了解物件創建失敗的原因。
經過三天的Debug,仍未能解決問題。
不知道有沒有經驗豐富的大神可以提供一些建議?感謝。

