Keresés és csere szöveg PowerPoint prezentációkban Python használatával

Áttekintés

Az Aspose.Slides for Python via .NET képes keresni, kiemelni és cserélni a szöveget egyetlen szövegkeretben vagy egy egész prezentációban. Ezek a lehetőségek hasznosak áttekintéshez, adateltávolításhoz, terminológiai ellenőrzésekhez, sablonok tisztításához és más automatizált dokumentumfeldolgozási munkafolyamatokhoz.

Az alábbi első példákban egy „sample.pptx” nevű fájlt használunk, amely az első dia egyetlen szövegdobozát tartalmazza a következő szöveggel:

Minta szöveg

Válassza ki a keresés hatókörét

Használja a TextFrame metódusait, hogy egy műveletet egy szövegkeretre korlátozzon. Használja a Presentation metódusait, hogy a prezentációban minden alkalmazható szöveget feldolgozzon.

Művelet Egy szövegkeret Teljes prezentáció
Szó szerinti szöveg kiemelése TextFrame.highlight_text Presentation.highlight_text
Reguláris kifejezés egyezéseinek kiemelése TextFrame.highlight_regex Presentation.highlight_regex
Szó szerinti szöveg cseréje TextFrame.replace_text Presentation.replace_text
Reguláris kifejezés egyezéseinek cseréje TextFrame.replace_regex Presentation.replace_regex

Szöveg egyezés konfigurálása

Szó szerinti műveletekhez használja a TextSearchOptions osztályt az egyezés szabályozásához:

A reguláris kifejezésekkel végzett műveleteknek mintaszövege van, így az olyan szabályok, mint a kis‑ és nagybetűkérzékenység vagy a szóhatárok, a kifejezésben vannak meghatározva.

Azonosítsa a szövegkeret tulajdonosát

Az általános szövegfeldolgozó munkafolyamatok gyakran egy TextFrame objektumot kapnak, miközben keresnek, cserélnek, ellenőriznek vagy exportálnak szöveget. Használja a TextFrame.parent_shape és a TextFrame.parent_cell tulajdonságokat annak meghatározásához, hogy melyik prezentációs objektum birtokolja a szövegkeretet.

A várt értékek a tulajdonostól függenek:

Szövegkeret tulajdonosa parent_shape parent_cell
AutoShape vagy egy másik szöveget tartalmazó alakzat A tulajdonos Shape None
Egy táblázat cella None A tulajdonos Cell

Mindkét tulajdonság csak‑olvasású navigációs tulajdonság. Olvasásuk nem mozgatja a szövegkeretet, illetve nem változtatja meg a tulajdonost. Az általános kódban ellenőrizni kell mindkét értéket None‑ra, és kezelni kell azt a lehetőséget, hogy egyik tulajdonos sem áll rendelkezésre.

A következő példa a SlideUtil.get_all_text_frames segítségével iterál a prezentáció szövegkeretei között. Alakzatok esetén a forma nevét, a Python futásidejű típusát és a tartalmazó diát jelenti. Táblázat cellák esetén a nulla‑bázisú oszlop‑ és sor‑koordinátákat, valamint a tartalmazó diát jelenti.

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.")

A SmartArt tartalom esetén iteráljon a SmartArtNode.shapes alakzatai között, és érje el minden ISmartArtShape.text_frame elemet. A szövegkeret a TextFrame.parent_shape segítségével követhető vissza a hozzá tartozó alakzatra, míg a TextFrame.parent_cell értéke None. Ezért a példában a forma ága szintén a SmartArt csomópontok szövegét kezeli.

Szöveg kiemelése

Használja a TextFrame.highlight_text metódust a szó szerinti egyezések kiemelésére egy szövegkeretben. Adja át a TextSearchOptions beállításait a keresés szabályozásához.

Az alábbi kódrészlet kiemeli a „try” karaktereket, majd csak a teljes „to” szót emeli ki.

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

    # Kiemeli a "try" szövegrész minden előfordulását a szövegkeretben.
    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

    # Kiemeli csak a teljes "to" szót.
    shape.text_frame.highlight_text(
        "to", draw.Color.violet, whole_word_search_options, None
    )

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

Az eredmény:

A kiemelt szöveg

Szöveg kiemelése reguláris kifejezésekkel

A TextFrame.highlight_regex metódus kiemeli a reguláris kifejezéssel megtalált szövegegyezéseket egy szövegkeretben.

Az alábbi kód kiemeli az összes olyan szót, amely legalább hét karaktert tartalmaz:

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
    )

Az eredmény:

A kiemelt szöveg reguláris kifejezéssel

Szöveg kiemelése prezentáción keresztül

Használja a Presentation.highlight_text és a Presentation.highlight_regex metódusokat a prezentációban alkalmazható összes szövegkeret kereséséhez. A következő példa kiemel egy szó szerinti kifejezést és az összes e‑mail címet:

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
    )

Szöveg cseréje egy szövegkeretben

Használja a TextFrame.replace_text metódust szó szerinti szöveghez, illetve a TextFrame.replace_regex metódust mintára alapozott cseréhez. Ezek a metódusok a megtalált szöveget a meglévő szövegkereten belül frissítik, amely megőrzi a környező részformázást a sima karakterláncból történő újraépítés helyett.

Az alábbi példa egységesíti egy helyesírási változatot, majd verziócímkéket cserél:

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
    )

Ha egy egyezés több, különböző formázású részt ölel fel, ellenőrizze a kimenetet, hogy melyik formázás legyen alkalmazva a csere szövegére.

Szöveg cseréje prezentáción keresztül

Használja a Presentation.replace_text és a Presentation.replace_regex metódusokat, hogy ugyanazokat a műveleteket a teljes prezentáción alkalmazza. Ez hasznos sablonok tisztításához, terminológiai frissítésekhez és adateltávolításhoz.

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
    )

GYIK

Hogyan kereshetek csak egy szövegdobozban az egész prezentáció helyett?

Szerezze be az alakzat szövegkeretét, és hívja meg a TextFrame.highlight_text, TextFrame.highlight_regex, TextFrame.replace_text vagy TextFrame.replace_regex metódusok egyikét azon a szövegkereten. A prezentációszintű metódusok az összes alkalmazható szövegkeretet dolgozzák fel.

Hogyan egyeztessek teljes szavakat a helyes nagybetűkkel?

Állítsa a TextSearchOptions.whole_words_only és a TextSearchOptions.case_sensitive értékét True‑ra, majd adja át a beállításokat egy szó szerinti kiemelés vagy csere metódusnak. Reguláris kifejezéseknél határozza meg a szóhatárokat és a nagy‑ és kisbetű‑érzékenységet magában a mintában.

A keresés és csere magában foglalhatja a diák megjegyzéseiben lévő szöveget?

Igen. Állítsa a TextSearchOptions.include_notes értékét True‑ra, amikor prezentációszintű szó szerinti műveletet használ.

Megőrzi a szövegformázást a csere során?

A TextFrame.replace_text és a TextFrame.replace_regex módosítja a megtalált szöveget a meglévő szövegkereten belül, és megőrzi a környező részek formázását. Ha egy egyezés több, különböző formázású részt ölel fel, vizsgálja meg az eredményt, hogy a csere a kívánt stílust használja‑e.