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:

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:
- TextSearchOptions.whole_words_only begränsar matchningar till hela ord.
- TextSearchOptions.case_sensitive styr om teckenkasning måste matcha.
- TextSearchOptions.include_notes inkluderar bildanteckningar i sök-, ersättnings- och markeringsoperationer på presentationsnivå.
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:

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:

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.