0
0

Officeファイル用pythonライブラリを古いoffice形式(ppt,doc,xls)でも使おう

Posted at

背景

Officeファイルを読み込めるpythonライブラリは便利ですが古いタイプのファイル、拡張子で言うと.ppt,.doc,.xlsでは使えないことがあるのは残念です。どうすればよいでしょう。

分解して考える

  1. 古いタイプのファイルを何とかして読み込む
  2. あたらしい形式で一時フォルダに保存
  3. 使いたい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'

動作確認

変換する元ファイルを用意
image.png

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'

ちゃんと変換されてました。よかった
image.png

念のための注意

・最終的に返されるのは変換後のファイルの「パス」であって、変換後のファイルではない
・当然だがシステムにOfficeがインストールされてないとだめ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0