0
0

More than 1 year has passed since last update.

PythonでPowerPointからノートを取り出す

Last updated at Posted at 2023-06-30

PowerPointのノート部分に書き込んだテキストを取り出して音声作成ツールにインポートするファイルを作りたく、方法を探していたら、Pythonでできそうだったので、やってみました。

実行環境:
Windows10(会社PC)
Python 3.10.11(Microsoft Storeからインストール)

やったことは以下になります。

1.専用のPython実行環境作り

軽い環境でやりたかったので仮想環境を作成
※以降自分でつけた仮想環境名を「env_pptx」としてコマンド記載しています

cd [環境置き場]
python3 -m venv env_pptx

これで、環境置き場にenv_pptxというフォルダができて、個別にPython環境が作れるようになります。

2.python-pptxのインストール

仮想環境の中で以下実行
「Successfully installed」が出てくればOK

cd [環境置き場]\env_pptx\Scripts
activate.bat
pip install python-pptx

3.コード作成と実行

まずは、参考サイトに習いつつ、コードを実行したところエラーに・・・

Traceback (most recent call last):
  File "C:\pptx_env\lib\site-packages\pptx\compat\__init__.py", line 10, in <module>
    Container = collections.abc.Container
AttributeError: module 'collections' has no attribute 'abc'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\pptx_env\Scripts\test.py", line 1, in <module>
    import pptx
  File "C:\pptx_env\lib\site-packages\pptx\__init__.py", line 14, in <module>
    from pptx.api import Presentation  # noqa
  File "C:\pptx_env\lib\site-packages\pptx\api.py", line 15, in <module>
    from .package import Package
  File "C:\pptx_env\lib\site-packages\pptx\package.py", line 6, in <module>
    from pptx.opc.package import OpcPackage
  File "C:\pptx_env\lib\site-packages\pptx\opc\package.py", line 11, in <module>
    from pptx.compat import is_string, Mapping
  File "C:\pptx_env\lib\site-packages\pptx\compat\__init__.py", line 14, in <module>
    Container = collections.Container
AttributeError: module 'collections' has no attribute 'Container'

しかし、よく見るとcollectionsにabcがないと言っていたので、「import collections.abc」を入れたところエラー解消。
後は、標準出力をファイル書き込みにしたり、読み込みファイルを引数で取れるようにして、最終的には以下のコードを作成しました。

test.py
import sys
import os
import collections.abc
import pptx

args = sys.argv
in_pptx= args[1]
out_dir = args[2]

prs = pptx.Presentation(in_pptx)
pptx_name = os.path.basename(in_pptx)
out_file = out_dir + "\\" + os.path.splitext(pptx_name)[0] + ".txt"

with open(out_file, 'w', encoding='UTF-8') as f: 
    for i, sld in enumerate(prs.slides, start=1):
        if i != 1:
            f.write('\n@@div@@\n') #ツールインポート用のページ区切り文字を挿入
        f.write(sld.notes_slide.notes_text_frame.text)

読み込む引数のエラー処理は入れる必要がありますが、ひとまず、

  • 各ページのノートに「ノートコメントXページ目」と記載した5ページのPPTXファイルを準備(C:\test.pptx)
  • 出力先フォルダを準備(C:\out_dir)
  • 以下のコマンドで実行
    python.exe test.py C:\test.pptx C:\out_dir

で以下のようなテキストファイルが出力できました。

test.txt
ノートコメント1ページ目
@@div@@
ノートコメント2ページ目
@@div@@
ノートコメント3ページ目
@@div@@
ノートコメント4ページ目
@@div@@
ノートコメント5ページ目

これで少し作業がはかどるかも?

参考サイト

https://python-pptx.readthedocs.io/en/latest/
https://www.relief.jp/docs/python-pptx-extract-text-notes.html

0
0
1

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