PythonでPowerPointプレゼンテーションからすべてのハイパーリンクを削除する

特定のPPT使用シナリオ、たとえばスライドの印刷が必要な場合やハイパーリンクが無効になった場合、プレゼンテーション内のハイパーリンクが妨げとなることがあります。このような状況では、PowerPointプレゼンテーション内のハイパーリンクを削除して、プレゼンテーションの一貫性と専門性を確保する必要があります。Pythonを使用することで、このタスクを効率的に一括処理し、自動化されたワークフローを実現できます。本記事では、**Pythonを使用してPowerPointプレゼンテーション内のすべてのハイパーリンクを削除する方法**をご紹介します。

- **[PythonでPPTのすべてのハイパーリンクを削除する方法](#pythonでpowerpointプレゼンテーションのすべてのハイパーリンクを削除する方法)**

本記事で使用する方法は、[Spire.Presentation for Python](https://jp.e-iceblue.com/download/spire-presentation-python.html)を使用します。PyPIからインストールできます：`pip install Spire.Presentation`。

[無料ライセンスを申請する](https://www.e-iceblue.com/TemLicense.html)

## PythonでPowerPointプレゼンテーションのすべてのハイパーリンクを削除する方法
プレゼンテーション内では、ハイパーリンクは自動シェイプ、表、画像、およびシェイプ内のテキストなど、さまざまなシェイプに追加できます。そのため、ハイパーリンクを削除する際には、シェイプおよびシェイプ内のテキストにハイパーリンクが含まれているかを確認し、含まれている場合はそれを削除する必要があります。以下に詳細な手順を示します：
1. 必要なリソースをインポートします。
2. `Presentation`オブジェクトを作成し、`Presentation.LoadFromFile()`メソッドを使用してPowerPointプレゼンテーションを読み込みます。
3. プレゼンテーション内のスライドをループし、各スライド内のシェイプをループします。
    - シェイプにハイパーリンクがあるかどうかを確認し、ある場合は`IShape.Click`プロパティを`IShape.Click.get_NoAction()`メソッドの結果に設定してハイパーリンクを削除します。
    - シェイプが`IAutoShape`オブジェクトであるかどうかを確認し、そうであればシェイプ内の段落および段落内のテキストフラグメントをループします。各テキストフラグメントにハイパーリンクがあるかどうかを確認し、ある場合は`TextRange.ClickAction`を`None`に設定してハイパーリンクを削除します。
    - シェイプが`ITable`オブジェクトであるかどうかを確認し、そうであれば各セル、セル内の段落、および段落内のテキストフラグメントをループします。テキストフラグメントにハイパーリンクが含まれているかを確認し、含まれているハイパーリンクを削除します。
4. `Presentation.SaveToFile()`メソッドを使用してプレゼンテーションを保存します。
5. リソースを解放します。

**コード例**
```python
from spire.presentation import Presentation, IAutoShape, ITable, FileFormat

# Presentationクラスのインスタンスを作成し、PowerPointプレゼンテーションをロードする
presentation = Presentation()
presentation.LoadFromFile("Sample.pptx")

# プレゼンテーション内のスライドを繰り返し処理する
for slide in presentation.Slides:
    # スライド内のシェイプを繰り返し処理する
    for shape in slide.Shapes:
        # シェイプがハイパーリンクを持っているかどうかを確認する
        if shape.Click is not None:
            # ハイパーリンクを削除する
            shape.Click = shape.Click.get_NoAction()
        # シェイプがIAutoShapeオブジェクトであるかどうかを確認する
        if isinstance(shape, IAutoShape):
            autoShape = IAutoShape(shape)
            # AutoShape内の段落を繰り返し処理する
            for para in autoShape.TextFrame.Paragraphs:
                # 段落内のテキスト範囲を繰り返し処理する
                for textRange in para.TextRanges:
                    # テキスト範囲がハイパーリンクを持っているかどうかを確認する
                    if textRange.ClickAction is not None:
                        # ハイパーリンクを削除する
                        textRange.ClickAction = None
        # シェイプがITableオブジェクトであるかどうかを確認する
        if isinstance(shape, ITable):
            table = ITable(shape)
            # テーブル内の行を繰り返し処理する
            for row in table.TableRows:
                # 行内のセルを繰り返し処理する
                for cell in row:
                    # セル内の段落を繰り返し処理する
                    for para in cell.TextFrame.Paragraphs:
                        # 段落内のテキスト範囲を繰り返し処理する
                        for textRange in para.TextRanges:
                            # テキスト範囲がハイパーリンクを持っているかどうかを確認する
                            if textRange.ClickAction is not None:
                                # ハイパーリンクを削除する
                                textRange.ClickAction = None

# プレゼンテーションを保存する
presentation.SaveToFile("output/RemovePresentationHyperlinks.pptx", FileFormat.Pptx2019)
presentation.Dispose()
```

本記事では、Pythonを使用してPowerPointプレゼンテーション内のすべてのハイパーリンクを削除する方法を示しました。

さらに多くのPowerPointプレゼンテーション処理のテクニックについては、[Spire.Presentation for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.Presentation-for-Python/Program-Guide/Spire.Presentation-for-Python-Program-Guide-Content.html)をご覧ください。