iT邦幫忙

1

python win32com 開啟 ppt 發生錯誤

我是python的新手, 最近在寫ppt 轉 pptx, 發生了一個奇怪的問題, 我的問題其他人不一定會發生, 但我發生了有可能其他人也會發生, 因此發個文做個記錄, 或許是我的電腦系統有問題也說不定
後來參考(Presentations.Open 方法 (PowerPoint)), 也不清楚為什麼改成這樣就能正常使用
也歡迎熟python的前輩可以指導解答並指正

環境:
win10pro x64 (21H2) + AD環境
python 3.8.10 (64bit)
Office 2007 Standar (32bit)
發生錯的程式碼是從網路範例參考語法

import os
import sys
import win32com
import win32com.client
#
readFile = r"D:\prg_python\test\test.ppt"
ppt = 0
ole = 0
ole = win32com.client.Dispatch("PowerPoint.Application")
print(ole)
ole.DisplayAlerts = 0
print(readFile)
ppt = ole.Presentations.Open(readFile)
ppt.Close()
ole.Quit()# 退出
#
sys.exit(0)

發生的錯誤訊息

Traceback (most recent call last):
  File "D:\prg_python\test.py", line 36, in <module>
    ppt = ole.Presentations.Open(readDir)
  File "<COMObject <unknown>>", line 2, in Open
pywintypes.com_error: (-2147352567, '發生例外狀況。', (0, 'Microsoft Office PowerPoint 2007', 'Presentations.Open : Invalid request.  The PowerPoint Frame window does not exist.', '', 0, -2147188160), None)

經過查閱網路, 找到是因為權限的問題, 怪了, 我操作 Excel 沒問題, PowerPoint 卻有問題, 好吧, 先解決問題再說
解決方式一, 程式修改為, 先呼叫 powerpnt.exe 就能解決問題, 但這不是我想要的

import os
import sys
import win32com
import win32com.client
#
readFile = r"D:\prg_python\test\test.ppt"
ppt = 0
ole = 0
os.startfile("powerpnt") #因為權限問題, 需要先開啟 PowerPoint, 再執行程式
ole = win32com.client.Dispatch("PowerPoint.Application")
print(ole)
ole.DisplayAlerts = 0
print(readFile)
ppt = ole.Presentations.Open(readFile)
ppt.Close()
ole.Quit()# 退出
#
sys.exit(0)

解決方式二, 參考文件(Presentations.Open 方法 (PowerPoint))後改成

import os
import sys
import win32com
import win32com.client
#
readFile = r"D:\prg_python\test\test.ppt"
ppt = 0
ole = 0
ole = win32com.client.Dispatch("PowerPoint.Application")
print(ole)
ole.DisplayAlerts = 0
print(readFile)
#參考文件: https://docs.microsoft.com/zh-tw/office/vba/api/PowerPoint.Presentations.Open
#語法改成這樣的語法就正常
ppt = ole.Presentations.Open(readFile, WithWindow=0)
ppt.Close()
ole.Quit()# 退出
#
sys.exit(0)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言