iT邦幫忙

1

用python批量將ppt轉換為pptx檔,若碰到加密檔案會使程式hang住,如何跳過不處理? # 保證給最佳解答

為鼓勵有些人回答盡心盡力,
在發問前先保證只要有解,最後一定選出最佳解答

問題描述

近來有需要大量將副檔名為ppt檔轉換為pptx檔的需求,
以python實作,程式本身不是大問題,很容易查到,
譬如stack overflow的問答- Convert ppt file to pptx in Python
範例如下:

import win32com.client
App = win32com.client.Dispatch("Powerpoint.Application")
App.Visible = True
PPtPresentation = App.Presentations.Open('./test.ppt')
PPtPresentation.SaveAs('./test.pptx')
PPtPresentation.close()
App.Quit()
print('Program End')

這段程式在轉換普通的ppt檔沒有問題,
然而若是碰到加密過的ppt檔(加密方法: PowerPoint 簡報的密碼保護),
程式會hang住停在那邊,
Office則會跳出一個視窗說「請輸入ppt的密碼」,
程式也不會報錯,
需要手動將ppt的視窗關掉程式才會繼續往下走。

我想可能是因為這個套件的原理是模擬用office開啟ppt檔,
再另存新檔,所以有彈出視窗

然而我們的目標是「能否讓程式跳過加密過的ppt檔不要處理」?
因為ppt檔案數量多,需要做自動化,
不希望手動關「請輸入ppt的密碼」的視窗

嘗試解法- 包try-except

一般來說,python的例外處理為try-except,
但我嘗試直接用try-except是無效的,
因此程式會停在那邊而不會報錯,直到手動將ppt的視窗關掉

import win32com.client
try:
    App = win32com.client.Dispatch("Powerpoint.Application")
    App.Visible = True
    PPtPresentation = App.Presentations.Open('./test.ppt')
    PPtPresentation.SaveAs('./test.pptx')
    PPtPresentation.close()
    App.Quit()
except Exception as e:
    print(e)
print('Program End')

目前我嘗試google許久,仍找不到有效的解法

其它可能的方向

目前有朝幾個方向去思考,但目前苦於找不到資料:

  1. 是否有可能用python判斷ppt檔有沒有被加密,以避免開啟加密檔讓程式hang住?
  2. 是否有可能在開啟ppt檔一段時間後,發現久未回應則自動關閉ppt檔?
  3. 是否有其它模組能做ppt to pptx的轉檔,以繞過直接用Office開檔的行為?

希望前輩們若有嘗試出來或知道怎麼解,能不吝分享,小馬不勝感激
/images/emoticon/emoticon41.gif

https://pypi.org/project/msoffcrypto-tool/
這裡有提到
Test if the file is encrypted or not (exit code 0 or 1 is returned):

msoffcrypto-tool document.doc --test -v

-------
也許可以試試看
froce iT邦大師 1 級 ‧ 2021-08-24 08:01:11 檢舉
或是加個expired time...
心原一馬 iT邦研究生 5 級 ‧ 2021-08-24 22:04:53 檢舉
謝謝屠豬士大大的分享,你分享的模組十分有幫助,恰能解決我的問題,你可以於回答區回答,我會樂於給最佳解答

2 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-08-24 09:40:33
最佳解答

這篇說OK
不妨試試看

心原一馬 iT邦研究生 5 級 ‧ 2021-08-24 22:02:51 檢舉

感謝分享

0
japhenchen
iT邦大師 1 級 ‧ 2021-08-24 12:38:00

.........重覆回答,幫刪..

心原一馬 iT邦研究生 5 級 ‧ 2021-08-24 22:02:06 檢舉

版主好像也沒有刪除功能耶

回應人也沒辦法自刪,只能塗牛賽

我要發表回答

立即登入回答