背景
Officeファイルを読み込めるpythonライブラリは便利ですが古いタイプのファイル、拡張子で言うと.ppt,.doc,.xlsでは使えないことがあるのは残念です。どうすればよいでしょう。
分解して考える
- 古いタイプのファイルを何とかして読み込む
- あたらしい形式で一時フォルダに保存
- 使いたいpythonライブラリに渡す
win32com.client 使おう
win32com.client(正式なライブラリ名はpywin32)を使うと楽です。環境に入っているということを前提として進めます。
ここではpptのファイルパスを渡すと、一時フォルダ内にpptxに変換したうえで保存し、そのパスを返す関数を考えます。基本的には.docでも.xlsでも同じです。
pptからpptxに変換する関数
import win32com.client
def ppt2pptx (ppt_path):
try:
pptApplication=win32com.client.Dispatch('PowerPoint.Application')
ppt=pptApplication.Presentations.Open(ppt_path,WithWindow=False,ReadOnly=True)
ppt.SaveAs(r'C:\2pptx_temp'+'\\'+ppt_path.split('\\')[-1]+'x',24)
pptApplication.Quit()
return r'C:\2pptx_temp'+'\\'+ppt_path.split('\\')[-1]+'x'
except Exception:
print (ppt_path + 'をうまく開けません')
return r'Error'
動作確認
import os
import win32com.client
os.makedirs(r'C:\2pptx_temp',exist_ok=True)
def ppt2pptx(ppt_path):
try:
pptApplication=win32com.client.Dispatch('PowerPoint.Application')
ppt=pptApplication.Presentations.Open(ppt_path,WithWindow=False,ReadOnly=True)
ppt.SaveAs(r'C:\2pptx_temp'+'\\'+ppt_path.split('\\')[-1]+'x',24)
pptApplication.Quit()
return r'C:\2pptx_temp'+'\\'+ppt_path.split('\\')[-1]+'x'
except Exception:
print (ppt_path + 'をうまく開けません')
import traceback
traceback.print_exc()
return r'Error'
ppt2pptx(r"C:\ppt\aaaaaa.ppt")
#output
'C:\\2pptx_temp\\aaaaaa.pptx'
念のための注意
・最終的に返されるのは変換後のファイルの「パス」であって、変換後のファイルではない
・当然だがシステムにOfficeがインストールされてないとだめ