LoginSignup
0
1
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

[Python] [python-pptx] Powerpointのノートをエクセルに出力し、変更して、戻す

Posted at

PPTをプレゼンするときに、自分の手元で表示できるノートですが、英語の文章を日本語に変えることになりました。しかし、1枚づつ変更するのはけっこう面倒です。

そこで、一旦エクセルに書き出して、Google翻訳したものを、また戻すというコードを書いてみたら、思ったよりうまくいったので、備忘録を兼ねて記事にします。

なお、私はJupyter Notebookでこの作業を行っていますので、他の環境の方は工夫してみてください。

まず、読み込みたいパワーポイントファイルは、同じディレクトリに入れておきます。今回は記事用にダミーのサンプルファイルを作りました。それをページごとに読み込んで、PandasのDataFrameに1ページごと取り込んで、同じディレクトリにEXCELで出力します。

イメージはこんな感じ
image.png

コードはこちら

import os
import pandas as pd

in_pptx= 'サンプルPPTノート.pptx'

prs = pptx.Presentation(in_pptx)
pptx_name = os.path.basename(in_pptx)

df=pd.DataFrame()

for i, sld in enumerate(prs.slides):
    note=sld.notes_slide.notes_text_frame.text
    df=pd.concat([df, pd.DataFrame([[i, note]])])

excel_writer = pd.ExcelWriter('SlideNotes.xlsx')
df.columns=['page', 'note']
df.to_excel(excel_writer, 'original_notes', index=False)

excel_writer.close()
print ('fnished!')

このエクセルを自動翻訳などで・・

image.png

このように、書き換えたいシートを作ります。今回は、translatedというシート名にしました。
image.png

もちろん、自分で翻訳されてもいいし、自動翻訳を修正してもいいかと思います。

その後、今度はPPTのノートを書き換えます。
ここで、元のPPTファイルを書き換えるようにしてしまいましたが、名前を変えるように、コードを変更されてもいいと思います。


import pptx
import pandas as pd

df=pd.read_excel('SlideNotes.xlsx', sheet_name='translated')

in_pptx= 'サンプルPPTノート.pptx'
prs = pptx.Presentation(in_pptx)

for i, sld in enumerate(prs.slides):

    if type (df.iloc[i, 0]) != int: #空の場合はエラーとなるので、処理を飛ばす
        prs.slides[i].notes_slide.notes_text_frame.text=df.iloc[i, 1]

prs.save(in_pptx)

print ('finished!')

そうすると、このようにPPTXのノートが書き換えられています。

image.png

このパワーポイントのノートはそこまで使わないかもしれませんが、この方式はタイトルや本文のテキストの抽出にも応用できるかと思いますので、ぜひトライしてみていただければと思います!

0
1
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
1