Vyhledávání a nahrazování textu v prezentacích PowerPoint v Pythonu
Přehled
Aspose.Slides pro Python prostřednictvím .NET může vyhledávat, zvýrazňovat a nahrazovat text v jednotlivém textovém rámečku nebo v celé prezentaci. Tyto možnosti jsou užitečné pro kontrolu, redakci, kontrolu terminologie, úklid šablon a další automatizované pracovní postupy zpracování dokumentů.
V prvních níže uvedených příkladech používáme soubor s názvem “sample.pptx”, který obsahuje jednu textovou oblast na první snímku s následujícím textem:

Zvolte rozsah vyhledávání
Použijte metody na TextFrame k omezení operace na jeden textový rámec. Použijte metody na Presentation ke zpracování veškerého relevantního textu v prezentaci.
| Operace | Jeden textový rámec | Celá prezentace |
|---|---|---|
| Zvýraznit doslovný text | TextFrame.highlight_text | Presentation.highlight_text |
| Zvýraznit shody regulárního výrazu | TextFrame.highlight_regex | Presentation.highlight_regex |
| Nahradit doslovný text | TextFrame.replace_text | Presentation.replace_text |
| Nahradit shody regulárního výrazu | TextFrame.replace_regex | Presentation.replace_regex |
Nastavení porovnávání textu
Pro operace s doslovným textem použijte TextSearchOptions ke kontrole porovnávání:
- TextSearchOptions.whole_words_only omezuje shody na celá slova.
- TextSearchOptions.case_sensitive určuje, zda se musí shodovat velikost písmen.
- TextSearchOptions.include_notes zahrnuje poznámky ke snímkům do vyhledávání, nahrazování a zvýrazňování na úrovni celé prezentace.
Operace s regulárními výrazy používají řetězec vzoru, takže pravidla porovnávání, jako je citlivost na velikost písmen a hranice slov, jsou definována samotným výrazem.
Identifikace vlastníka textového rámce
Obecné pracovní postupy pro zpracování textu často získají TextFrame při vyhledávání, nahrazování, validaci nebo exportu textu. Použijte TextFrame.parent_shape a TextFrame.parent_cell k určení, který objekt prezentace vlastní daný textový rámec.
Očekávané hodnoty závisí na vlastníkovi:
| Vlastník textového rámce | parent_shape |
parent_cell |
|---|---|---|
| Automatický tvar nebo jiný tvar obsahující text | Vlastní Shape | None |
| Buňka tabulky | None |
Vlastní Cell |
Obě vlastnosti jsou jen pro čtení a slouží jako navigační. Čtení nemění pozici textového rámce ani jeho vlastníka. Obecný kód by měl kontrolovat obě hodnoty na None a ošetřit možnost, že žádný vlastník není dostupný.
Následující příklad používá SlideUtil.get_all_text_frames k iteraci přes všechny textové rámce v prezentaci. Pro tvary vypisuje název tvaru, typ v Pythonu a snímek, ve kterém se nachází. Pro buňky tabulky vypisuje souřadnice sloupce a řádku (od nuly) a snímek, ve kterém jsou obsaženy.
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.")
Pro obsah SmartArt iterujte přes tvary v SmartArtNode.shapes a přistupujte k jednotlivým ISmartArtShape.text_frame. Textový rámec lze zpětně navázat na svůj asociovaný tvar pomocí TextFrame.parent_shape, zatímco TextFrame.parent_cell je None. Proto větev tvarů v ukázce také zpracovává text ze SmartArt uzlů.
Zvýraznit text
Použijte metodu TextFrame.highlight_text k zvýraznění doslovných shod v textovém rámečku. Při volání předávejte [TextSearchOptions] pro řízení vyhledávání.
Níže uvedený ukázkový kód zvýrazní všechny výskyty znaků “try” a poté zvýrazní jen úplné slovo “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
# Zvýraznit každý výskyt "try" v textovém rámečku.
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
# Zvýraznit pouze úplné slovo "to".
shape.text_frame.highlight_text(
"to", draw.Color.violet, whole_word_search_options, None
)
presentation.save("highlighted_text.pptx", slides.export.SaveFormat.PPTX)
Výsledek:

Zvýraznit text pomocí regulárních výrazů
Metoda TextFrame.highlight_regex zvýrazní textové shody nalezené regulárním výrazem v textovém rámečku.
Následující kód zvýrazní všechna slova obsahující sedm a více znaků:
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
)
Výsledek:

Zvýraznit text v celé prezentaci
Použijte Presentation.highlight_text a Presentation.highlight_regex k vyhledání ve všech relevantních textových rámečcích v prezentaci. Následující příklad zvýrazní doslovný termín a všechny e‑mailové adresy:
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
)
Nahradit text v textovém rámečku
Použijte TextFrame.replace_text pro doslovný text a TextFrame.replace_regex pro nahrazení na základě vzoru. Tyto metody aktualizují nalezený text v existujícím textovém rámečku, přičemž si zachovávají formátování okolních částí místo přepisování celého rámce z prostého řetězce.
Následující příklad sjednotí variantu pravopisu a poté nahradí štítky verze:
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
)
Pokud jedna shoda zasahuje do částí s různým formátováním, zkontrolujte výstup, abyste potvrdili, které formátování by se mělo použít pro nahrazený text.
Nahradit text v celé prezentaci
Použijte Presentation.replace_text a Presentation.replace_regex k provedení stejných operací napříč celou prezentací. To je užitečné pro úklid šablon, aktualizaci terminologie a redakci.
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
)
Často kladené otázky
Jak mohu vyhledávat jen v jednom textovém rámečku místo celé prezentace?
Získejte textový rámec tvaru a zavolejte TextFrame.highlight_text, TextFrame.highlight_regex, TextFrame.replace_text nebo TextFrame.replace_regex na tomto textovém rámečku. Metody na úrovni prezentace zpracovávají všechny relevantní textové rámečky místo toho.
Jak mohu shodovat úplná slova s přesnou kapitalizací?
Nastavte TextSearchOptions.whole_words_only a TextSearchOptions.case_sensitive na True a předávejte možnosti metodě pro zvýraznění nebo nahrazení doslovného textu. Pro regulární výrazy definujte hranice slov a citlivost na velikost písmen přímo ve vzoru.
Může vyhledávání a nahrazování zahrnovat text v poznámkách ke snímkům?
Ano. Nastavte TextSearchOptions.include_notes na True při použití operace doslovného textu na úrovni celé prezentace.
Zachovává nahrazení textu jeho formátování?
TextFrame.replace_text a TextFrame.replace_regex upravují nalezený text v existujícím textovém rámečku a zachovávají formátování okolních částí. Pokud shoda zahrnuje části s různým formátováním, prohlédněte výsledek a ujistěte se, že nahrazení používá požadovaný styl.