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」を入れたところエラー解消。
後は、標準出力をファイル書き込みにしたり、読み込みファイルを引数で取れるようにして、最終的には以下のコードを作成しました。
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
で以下のようなテキストファイルが出力できました。
ノートコメント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