チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»Python»Spire.XLS for Python»変換»Python で TXT ファイルを CSV に変換する方法
2026-11-02

Python で PowerPoint 内のテキストを検索してハイライトする方法

PowerPoint の選択テキストをハイライトする

PowerPoint 資料の中から、重要なキーワードを見つけて強調表示したいことはありませんか。スライドの数が多い場合、対象の文字列を一つずつ探して色を付ける作業には時間がかかります。

Python を使えば、複数のスライドを順番に処理し、指定したテキストをまとめてハイライトできます。本記事では、Spire.Presentation for Python を使用し、日本語の文字列「聴衆」を検索して黄色で強調表示する方法を解説します。

目次

Spire.Presentation for Python のインストール

Spire.Presentation for Python は、Python で PowerPoint ファイルの作成・編集・変換を行うためのライブラリです。Microsoft PowerPoint をインストールせずに、スライドやテキスト、図形、画像などを操作できます。本記事では、既存の PowerPoint ファイルを読み込み、指定した日本語の文字列を検索してハイライトするために使用します。

まず、次のコマンドでライブラリをインストールします。

pip install Spire.Presentation

次に、処理対象の PowerPoint ファイルを用意します。この記事では、Input.pptx を入力ファイルとし、処理結果を HighlightText.pptx に保存します。

相対パスを使用する場合は、Python を実行する際の作業ディレクトリに入力ファイルを配置してください。別の場所にあるファイルを処理する場合は、ファイルパスを変更します。

テキストを検索してハイライトする仕組み

Spire.Presentation for Python では、図形のテキストフレームに対して HighLightText() メソッドを呼び出すことで、指定した文字列を検索してハイライトできます。検索条件は TextHighLightingOptions で設定します。

基本的な処理の流れは次のとおりです。

  1. PowerPoint ファイルを読み込む。
  2. 検索文字列「聴衆」とハイライト色を指定する。
  3. 日本語の文字列検索に合わせて検索条件を設定する。
  4. 各スライドの図形を調べ、一致する箇所をハイライトする。
  5. 結果を別の PowerPoint ファイルとして保存する。

Python のサンプルコード

次のコードは、各スライドの対象図形から「聴衆」を検索し、一致した箇所を黄色でハイライトする例です。

from spire.presentation import *
from spire.presentation.common import Color

# 入出力ファイルと検索する文字列
input_file = "Input.pptx"
output_file = "HighlightText.pptx"
search_text = "聴衆"

ppt = Presentation()

try:
    # PowerPoint ファイルを読み込む
    ppt.LoadFromFile(input_file)

    # 日本語の文字列検索に合わせて設定する
    options = TextHighLightingOptions()
    options.WholeWordsOnly = False
    options.CaseSensitive = False

    # ハイライト色を指定する
    highlight_color = Color.get_Yellow()

    # 各スライドの図形内で文字列を検索する
    for slide in ppt.Slides:
        for shape in slide.Shapes:
            if not isinstance(shape, IAutoShape):
                continue

            try:
                text_frame = shape.TextFrame
                text_frame.HighLightText(
                    search_text,
                    highlight_color,
                    options,
                )
            except Exception:
                # テキストフレームの取得や処理に失敗した図形をスキップ
                continue

    # 処理結果を別の PPTX ファイルに保存する
    ppt.SaveToFile(output_file, FileFormat.Pptx2019)

finally:
    # 使用したリソースを解放する
    ppt.Dispose()

出力結果

Python を使用して PowerPoint のテキストをハイライトする

コードの解説

1. PowerPoint ファイルを読み込む

Presentation オブジェクトを作成し、LoadFromFile() で入力ファイルを読み込みます。

ppt = Presentation()
ppt.LoadFromFile(input_file)

この後、読み込んだプレゼンテーションのスライドや図形にアクセスして処理を行います。

2. 日本語の検索文字列と検索条件を設定する

検索対象には、日本語の文字列「聴衆」を指定します。

search_text = "聴衆"

続いて、検索条件を設定します。

options = TextHighLightingOptions()
options.WholeWordsOnly = False
options.CaseSensitive = False

WholeWordsOnly と CaseSensitive は、主に英語などの西文を検索する際に役立つ設定です。日本語の「聴衆」を検索する場合は、次のように考えます。

設定項目 主な用途 今回の設定
WholeWordsOnly 英語などで単語全体の一致を指定する Falseにして、文中に含まれる「聴衆」を検索する
CaseSensitive 英字の大文字・小文字を区別する 「聴衆」には大文字・小文字の区別がないため、Falseにする

日本語は通常、単語を空白で区切りません。そのため、WholeWordsOnly を日本語の単語を判別する機能として使うことは避け、この例では False に設定します。たとえば、「聴衆の関心を引く」という文章中の「聴衆」を検索することを想定しています。

また、CaseSensitive は「聴衆」のような漢字だけの検索文字列には実質的な影響がありません。英字を含むキーワードを検索する場合に、必要に応じて変更してください。

3. 各図形のテキストをハイライトする

ppt.Slides でスライドを順番に取得し、各スライドの Shapes を調べます。IAutoShape に該当しない図形は、continue でスキップします。

for slide in ppt.Slides:
    for shape in slide.Shapes:
        if not isinstance(shape, IAutoShape):
            continue

        try:
            text_frame = shape.TextFrame
            text_frame.HighLightText(
                search_text,
                highlight_color,
                options,
            )
        except Exception:
            # テキストフレームの取得や処理に失敗した図形をスキップ
            continue

対象の図形から TextFrame を取得し、HighLightText() に検索文字列、色、検索条件を渡します。これにより、テキストフレーム内の一致する箇所がハイライトされます。事前に別の検索メソッドを呼び出す必要はありません。

図形ごとに try...except を設けているため、ある図形の処理に失敗しても、次の図形へ進みます。ただし、except Exception はテキストフレームの取得失敗だけでなく、ハイライト処理中の例外もスキップします。処理結果を確認したい場合は、例外の内容をログに記録すると原因を調べやすくなります。

なお、このコードはスライド直下の IAutoShape を対象にしています。表のセルやグループ内の図形なども処理したい場合は、それぞれの構造に応じた走査処理を追加してください。画像に写っている文字は、このコードの対象には含まれません。

4. 処理結果を保存する

最後に、SaveToFile() で結果を保存します。

ppt.SaveToFile(output_file, FileFormat.Pptx2019)

入力ファイルとは異なる出力先を指定しているため、元の Input.pptx を残したまま、ハイライトを適用した HighlightText.pptx を作成できます。

複数の日本語キーワードをハイライトするには

複数の用語を強調したい場合は、検索文字列をリストにまとめ、同じテキストフレームに対して順番に処理します。サンプルコードのスライド走査部分を、次のように置き換えてください。

keywords = ["聴衆", "発表", "資料"]

for slide in ppt.Slides:
    for shape in slide.Shapes:
        if not isinstance(shape, IAutoShape):
            continue

        try:
            text_frame = shape.TextFrame

            for keyword in keywords:
                text_frame.HighLightText(
                    keyword,
                    highlight_color,
                    options,
                )
        except Exception:
            # テキストフレームの取得や処理に失敗した図形をスキップ
            continue

この例では、「聴衆」「発表」「資料」を同じ黄色でハイライトします。検索対象のリストを変更すれば、資料ごとに異なるキーワードにも対応できます。

まとめ

本記事では、Spire.Presentation for Python を使用して、PowerPoint 内の日本語「聴衆」を検索し、ハイライトする方法を紹介しました。各スライドの対象図形からテキストフレームを取得し、HighLightText() を呼び出すことで、一致する文字列を強調表示できます。

日本語を検索する場合は、単語単位の一致を指定する WholeWordsOnly を False に設定し、文中の文字列を検索する方法が基本です。また、漢字やひらがな、カタカナだけの検索文字列には、英字の大文字・小文字を区別する CaseSensitive は実質的な影響がありません。

検索する語句や色を変更して、重要な用語の強調や資料のレビューに活用してください。

よくある質問(FAQ)

1. ハイライトの色を変更できますか?

はい。HighLightText() に渡す色を変更します。たとえば、黄色から緑色に変更する場合は、次のように指定します。

highlight_color = Color.get_Green()

2. 特定のスライドだけを処理できますか?

はい。すべてのスライドをループする代わりに、対象のスライドを指定します。次の例では、先頭のスライドだけを処理します。

slide = ppt.Slides[0]

for shape in slide.Shapes:
    if not isinstance(shape, IAutoShape):
        continue

    try:
        text_frame = shape.TextFrame
        text_frame.HighLightText(
            search_text,
            highlight_color,
            options,
        )
    except Exception:
        # テキストフレームの取得や処理に失敗した図形をスキップ
        continue

3. 元の PowerPoint ファイルは上書きされますか?

記事のサンプルでは、入力ファイルが Input.pptx、出力ファイルが HighlightText.pptx のため、元のファイルは上書きされません。元の資料を残したい場合は、出力先に異なるファイル名またはフォルダーを指定してください。

4. 一部の図形がハイライトされない場合は、何を確認すればよいですか?

まず、対象の文字が画像ではなく、編集可能なテキストであるかを確認してください。次に、表のセルやグループ内の図形など、サンプルの走査対象外に文字が含まれていないかを確認します。

また、このコードは図形の処理中に発生した例外をスキップします。原因を調べる場合は、<span>except</span> 部分を次のように変更し、エラー内容を確認してください。

except Exception as e:
    print(f"図形の処理をスキップしました: {e}")
    continue

無料ライセンスを取得する

Spire.Presentation for Python の機能を評価制限なしで体験したい場合は、30 日間無料トライアルライセンス を申請できます。

Read 9 times