Suche und Ersetze Text in PowerPoint‑Präsentationen in Python

Übersicht

Aspose.Slides for Python via .NET kann Text in einem einzelnen Textfeld oder in einer gesamten Präsentation suchen, hervorheben und ersetzen. Diese Funktionen sind nützlich für Überprüfungen, Schwärzungen, Terminologie‑Prüfungen, Vorlagenbereinigungen und andere automatisierte Dokumentverarbeitungs‑Workflows.

In den nachfolgenden ersten Beispielen verwenden wir eine Datei namens “sample.pptx”, die auf der ersten Folie ein einzelnes Textfeld mit folgendem Text enthält:

Beispieltext

Suchbereich auswählen

Verwenden Sie Methoden von TextFrame, um eine Operation auf ein Textfeld zu beschränken. Verwenden Sie Methoden von Presentation, um den gesamten anwendbaren Text in der Präsentation zu verarbeiten.

Operation Ein Textfeld Ganze Präsentation
Literaltext hervorheben TextFrame.highlight_text Presentation.highlight_text
Regex‑Übereinstimmungen hervorheben TextFrame.highlight_regex Presentation.highlight_regex
Literaltext ersetzen TextFrame.replace_text Presentation.replace_text
Regex‑Übereinstimmungen ersetzen TextFrame.replace_regex Presentation.replace_regex

Textabgleich konfigurieren

Für Literaltext‑Operationen verwenden Sie TextSearchOptions, um den Abgleich zu steuern:

Regex‑Operationen verwenden einen Muster‑String, sodass Regeln wie Groß‑/Kleinschreibung und Wortgrenzen durch den Ausdruck definiert werden.

Den Eigentümer eines Textfelds ermitteln

Generische Textverarbeitungs‑Workflows erhalten häufig ein TextFrame, während sie Text suchen, ersetzen, validieren oder exportieren. Verwenden Sie TextFrame.parent_shape und TextFrame.parent_cell, um festzustellen, welches Präsentationsobjekt das Textfeld besitzt.

Die erwarteten Werte hängen vom Eigentümer ab:

Textfeld‑Eigentümer parent_shape parent_cell
Ein AutoShape oder eine andere Text‑enthaltende Shape The owning Shape None
Eine Tabellenzelle None The owning Cell

Beide Eigenschaften sind schreibgeschützte Navigations‑Properties. Das Auslesen verschiebt das Textfeld nicht und ändert dessen Eigentümer nicht. Generischer Code sollte beide Werte auf None prüfen und die Möglichkeit berücksichtigen, dass kein Eigentümer verfügbar ist.

Das folgende Beispiel verwendet SlideUtil.get_all_text_frames, um durch die Textfelder einer Präsentation zu iterieren. Für Shapes gibt es den Shape‑Namen, den Python‑Laufzeit‑Typ und die zugehörige Folie aus. Für Tabellenzellen werden die nullbasierten Spalten‑ und Zeilenkoordinaten sowie die zugehörige Folie ausgegeben.

import aspose.slides as slides


def get_slide_label(base_slide):
    if isinstance(base_slide, slides.Slide):
        return f"slide {base_slide.slide_number}"

    if isinstance(base_slide, slides.NotesSlide):
        return f"notes for slide {base_slide.parent_slide.slide_number}"

    return type(base_slide).__name__


with slides.Presentation("presentation.pptx") as presentation:
    text_frames = slides.util.SlideUtil.get_all_text_frames(presentation, False)

    for text_frame in text_frames:
        owner_shape = text_frame.parent_shape
        if owner_shape is not None:
            shape_name = owner_shape.name or "(unnamed)"
            shape_type = type(owner_shape).__name__
            slide_label = get_slide_label(owner_shape.slide)
            print(f"Shape: {shape_name}; type: {shape_type}; {slide_label}")
            continue

        owner_cell = text_frame.parent_cell
        if owner_cell is not None:
            slide_label = get_slide_label(owner_cell.slide)
            print(f"Table cell: column {owner_cell.first_column_index}, row {owner_cell.first_row_index}; {slide_label}")
            continue

        print("The text frame owner is not available as a shape or table cell.")

Für SmartArt‑Inhalte iterieren Sie über die Shapes in SmartArtNode.shapes und greifen auf jedes ISmartArtShape.text_frame zu. Das Textfeld lässt sich über TextFrame.parent_shape zu seiner zugehörigen Shape zurückverfolgen, während TextFrame.parent_cell None ist. Daher verarbeitet der Shape‑Zweig im Beispiel auch Text aus SmartArt‑Knoten.

Text hervorheben

Verwenden Sie die Methode TextFrame.highlight_text, um Literaltext‑Übereinstimmungen in einem Textfeld hervorzuheben. Übergeben Sie TextSearchOptions, um die Suche zu steuern.

Das nachstehende Code‑Beispiel hebt alle Vorkommen der Zeichenfolge “try” hervor und hebt anschließend nur das vollständige Wort “to” hervor.

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    substring_search_options = slides.TextSearchOptions()
    substring_search_options.case_sensitive = False

    # Alle Vorkommen von "try" im Textfeld hervorheben.
    shape.text_frame.highlight_text(
        "try", draw.Color.light_blue, substring_search_options, None
    )

    whole_word_search_options = slides.TextSearchOptions()
    whole_word_search_options.whole_words_only = True
    whole_word_search_options.case_sensitive = False

    # Nur das vollständige Wort "to" hervorheben.
    shape.text_frame.highlight_text(
        "to", draw.Color.violet, whole_word_search_options, None
    )

    presentation.save("highlighted_text.pptx", slides.export.SaveFormat.PPTX)

Das Ergebnis:

Der hervorgehobene Text

Text mit regulären Ausdrücken hervorheben

Die Methode TextFrame.highlight_regex hebt Textübereinstimmungen hervor, die durch einen regulären Ausdruck in einem Textfeld gefunden wurden.

Der folgende Code hebt alle Wörter hervor, die sieben oder mehr Zeichen enthalten:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("sample.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]
    word_pattern = r"\b[^\s]{7,}\b"

    shape.text_frame.highlight_regex(word_pattern, draw.Color.yellow, None)

    presentation.save(
        "highlighted_text_using_regex.pptx", slides.export.SaveFormat.PPTX
    )

Das Ergebnis:

Der mit dem regulären Ausdruck hervorgehobene Text

Text in einer gesamten Präsentation hervorheben

Verwenden Sie Presentation.highlight_text und Presentation.highlight_regex, um alle anwendbaren Textfelder in einer Präsentation zu durchsuchen. Das folgende Beispiel hebt einen Literalbegriff und alle E‑Mail‑Adressen hervor:

import aspose.pydrawing as draw
import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = False

    presentation.highlight_text(
        "confidential", draw.Color.orange, search_options, None
    )

    email_pattern = r"(?i)\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b"
    presentation.highlight_regex(email_pattern, draw.Color.yellow)

    presentation.save(
        "highlighted_presentation.pptx", slides.export.SaveFormat.PPTX
    )

Text in einem Textfeld ersetzen

Verwenden Sie TextFrame.replace_text für Literaltext und TextFrame.replace_regex für ersatzbasierte Muster. Diese Methoden aktualisieren den gefundenen Text im bestehenden Textfeld, wobei die umgebende Formatierung erhalten bleibt, anstatt das Textfeld aus einem reinen String neu zu erstellen.

Das folgende Beispiel vereinheitlicht eine Schreibvarianten und ersetzt anschließend Versionsbezeichnungen:

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    slide = presentation.slides[0]
    shape = slide.shapes[0]

    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = False

    shape.text_frame.replace_text(
        "colour", "color", search_options, None
    )

    version_pattern = r"(?i)\bv\d+(?:\.\d+)*\b"
    shape.text_frame.replace_regex(version_pattern, "current version")

    presentation.save(
        "updated_text_frame.pptx", slides.export.SaveFormat.PPTX
    )

Wenn eine Übereinstimmung Abschnitte mit unterschiedlicher Formatierung umfasst, prüfen Sie die Ausgabe, um zu bestätigen, welche Formatierung auf den ersetzten Text angewendet werden soll.

Text in einer gesamten Präsentation ersetzen

Verwenden Sie Presentation.replace_text und Presentation.replace_regex, um die gleichen Vorgänge über die gesamte Präsentation hinweg anzuwenden. Dies ist nützlich für die Bereinigung von Vorlagen, Terminologie‑Updates und Schwärzungen.

import aspose.slides as slides

with slides.Presentation("presentation.pptx") as presentation:
    search_options = slides.TextSearchOptions()
    search_options.whole_words_only = True
    search_options.case_sensitive = True

    presentation.replace_text(
        "Contoso", "Example Corp", search_options, None
    )

    account_number_pattern = r"\bACCT-\d{6}\b"
    presentation.replace_regex(account_number_pattern, "ACCT-REDACTED")

    presentation.save(
        "updated_presentation.pptx", slides.export.SaveFormat.PPTX
    )

FAQ

Wie kann ich nur ein Textfeld anstelle der gesamten Präsentation durchsuchen?

Rufen Sie das Textfeld der Shape ab und rufen Sie TextFrame.highlight_text, TextFrame.highlight_regex, TextFrame.replace_text, oder TextFrame.replace_regex für dieses Textfeld auf. Methoden auf Präsentationsebene verarbeiten stattdessen alle anwendbaren Textfelder.

Wie kann ich ganze Wörter mit korrekter Groß‑ und Kleinschreibung abgleichen?

Setzen Sie TextSearchOptions.whole_words_only und TextSearchOptions.case_sensitive auf True und übergeben Sie die Optionen an eine Literaltext‑Hervorhebungs‑ oder Ersatz‑Methode. Bei regulären Ausdrücken definieren Sie Wortgrenzen und Groß‑/Kleinschreibung im Muster selbst.

Können Suche und Ersetzung Text in Foliennotizen einbeziehen?

Ja. Setzen Sie TextSearchOptions.include_notes auf True, wenn Sie eine Literaltext‑Operation auf Präsentationsebene verwenden.

Behält das Ersetzen von Text dessen Formatierung bei?

TextFrame.replace_text und TextFrame.replace_regex ändern den gefundenen Text im bestehenden Textfeld und behalten die umgebende Formatierung bei. Wenn eine Übereinstimmung Abschnitte mit unterschiedlicher Formatierung umfasst, prüfen Sie das Ergebnis, um sicherzustellen, dass die Ersetzung den gewünschten Stil verwendet.