Sök och ersätt text i PowerPoint-presentationer i Python

Översikt

Aspose.Slides för Python via .NET kan söka, markera och ersätta text i en enskild textram eller i hela en presentation. Dessa funktioner är användbara för granskning, redigering, terminologikontroller, mallrengöring och andra automatiserade dokumentbehandlingsarbetsflöden.

I de första exemplen nedan använder vi en fil som heter “sample.pptx”, som innehåller en enda textruta på den första bilden med följande text:

Exempeltext

Välj sökområde

Använd metoder på TextFrame för att begränsa en operation till en textram. Använd metoder på Presentation för att bearbeta all tillämplig text i presentationen.

Operation En textram Hela presentationen
Markera bokstavlig text TextFrame.highlight_text Presentation.highlight_text
Markera matchningar med reguljärt uttryck TextFrame.highlight_regex Presentation.highlight_regex
Ersätt bokstavlig text TextFrame.replace_text Presentation.replace_text
Ersätt matchningar med reguljärt uttryck TextFrame.replace_regex Presentation.replace_regex

Konfigurera textmatchning

För operationer med bokstavlig text, använd TextSearchOptions för att kontrollera matchning:

Operationer med reguljära uttryck använder en mönstersträng, så matchningsregler såsom teckenkasning och ordgränser definieras av själva uttrycket.

Identifiera ägaren av en textram

Generiska textbehandlingsarbetsflöden får ofta en TextFrame när de söker, ersätter, validerar eller exporterar text. Använd TextFrame.parent_shape och TextFrame.parent_cell för att avgöra vilket presentationsobjekt som äger textramen.

De förväntade värdena beror på ägaren:

Ägare av textram parent_shape parent_cell
En AutoShape eller en annan textinnehållande form Den ägande Shape None
En tabellcell None Den ägande Cell

Båda egenskaperna är skrivskyddade navigeringsegenskaper. Att läsa dem flyttar inte textramen eller ändrar dess ägare. Generisk kod bör kontrollera båda värdena för None och hantera möjligheten att ingen ägare finns tillgänglig.

Följande exempel använder SlideUtil.get_all_text_frames för att iterera genom textramarna i en presentation. För former rapporteras formens namn, Python‑körtidstyp och innehållande bild. För tabellceller rapporteras de nollbaserade kolumn‑ och radkoordinaterna samt den innehållande bilden.

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‑innehåll itereras genom formerna i SmartArtNode.shapes och varje ISmartArtShape.text_frame nås. Textramen kan spåras till sin associerade form via TextFrame.parent_shape, medan TextFrame.parent_cell är None. Därför hanterar formgrenen i exemplet även text från SmartArt‑noder.

Markera text

Använd metoden TextFrame.highlight_text för att markera bokstavliga matchningar i en textram. Skicka in TextSearchOptions för att styra sökningen.

Kodexemplet nedan markerar alla förekomster av tecknen “try” och markerar sedan bara hela ordet “to”.

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

    # Markera varje förekomst av "try" i textramen.
    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

    # Markera bara hela ordet "to".
    shape.text_frame.highlight_text(
        "to", draw.Color.violet, whole_word_search_options, None
    )

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

Resultatet:

Den markerade texten

Markera text med reguljära uttryck

Metoden TextFrame.highlight_regex markerar textmatchningar som hittas med ett reguljärt uttryck i en textram.

Följande kod markerar alla ord som innehåller sju eller fler tecken:

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
    )

Resultatet:

Den markerade texten med reguljärt uttryck

Markera text i en presentation

Använd Presentation.highlight_text och Presentation.highlight_regex för att söka alla tillämpliga textramar i en presentation. Följande exempel markerar ett bokstavligt begrepp och alla e‑postadresser:

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
    )

Ersätt text i en textram

Använd TextFrame.replace_text för bokstavlig text och TextFrame.replace_regex för mönsterbaserad ersättning. Dessa metoder uppdaterar matchad text inom den befintliga textramen, vilket bevarar formateringen på omgivande delar istället för att bygga om textramen från en vanlig sträng.

Följande exempel standardiserar en stavningsvariant och ersätter sedan versionsetiketter:

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
    )

Om en matchning spänner över delar med olika formatering, granska resultatet för att bekräfta vilken formatering som ska tillämpas på den ersatta texten.

Ersätt text i en presentation

Använd Presentation.replace_text och Presentation.replace_regex för att tillämpa samma operationer i hela presentationen. Detta är användbart för mallrengöring, terminologiska uppdateringar och redigering.

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

Hur kan jag söka endast i en textruta istället för hela presentationen?

Hämta formens textram och anropa TextFrame.highlight_text, TextFrame.highlight_regex, TextFrame.replace_text eller TextFrame.replace_regex på den textramen. Metoder på presentationsnivå bearbetar alla tillämpliga textramar istället.

Hur kan jag matcha hela ord med korrekt versalisering?

Ställ in TextSearchOptions.whole_words_only och TextSearchOptions.case_sensitive till True och skicka alternativen till en metod för markerning eller ersättning av bokstavlig text. För reguljära uttryck definieras ordgränser och teckenkasning i själva mönstret.

Kan sökning och ersättning inkludera text i bildanteckningar?

Ja. Ställ in TextSearchOptions.include_notes till True när du använder en bokstavlig textoperation på presentationsnivå.

Behåller ersättning av text dess formatering?

TextFrame.replace_text och TextFrame.replace_regex ändrar matchad text inom den befintliga textramen och behåller formateringen på omgivande delar. Om en matchning spänner över delar med olika formatering, inspektera resultatet för att säkerställa att ersättningen använder den önskade stilen.