Sök och ersätt text i PowerPoint-presentationer i JavaScript
Översikt
Aspose.Slides för Node.js via Java kan söka, markera och ersätta text i en enskild textruta eller i hela en presentation. Varje operation kan också meddela en applikation om varje matchning via ett resultat‑callback. Detta gör det möjligt att uppdatera en presentation och samtidigt skapa en revisionsspårning som innehåller den matchade texten, dess kontext, position, textruta och bildnummer.
Dessa funktioner är användbara för granskning, redigering, terminologikontroller, mallstädning och automatiserade rapporteringsarbetsflö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 textruta. Använd metoder på Presentation för att bearbeta all tillämplig text i presentationen.
| Operation | En textruta | Hela presentationen |
|---|---|---|
| Markera bokstavlig text | TextFrame.highlightText | Presentation.highlightText |
| Markera reguljära uttrycksmatchningar | TextFrame.highlightRegex | Presentation.highlightRegex |
| Ersätt bokstavlig text | TextFrame.replaceText | Presentation.replaceText |
| Ersätt reguljära uttrycksmatchningar | TextFrame.replaceRegex | Presentation.replaceRegex |
Konfigurera textmatchning
För operationer med bokstavlig text, använd TextSearchOptions för att styra matchning:
- TextSearchOptions.setWholeWordsOnly begränsar matchningar till hela ord.
- TextSearchOptions.setCaseSensitive styr om teckenkänslighet måste matchas.
- TextSearchOptions.setIncludeNotes inkluderar bildanteckningar i sök‑, ersättnings‑ och markeringsoperationer på presentationsnivå.
Operationer med reguljära uttryck använder ett Java Pattern, så matchningsregler såsom teckenkänslighet och ordgränser definieras av själva uttrycket och dess flaggor.
Samla matchningsinformation med en callback
Skapa en Java‑proxy för resultat‑callbacken för att få en avisering för varje matchning. Proxy‑funktionen tar emot den relaterade textrutan, källtexten, den matchade texten och matchningspositionen.
Callbacken får inte ett bildnummer direkt. Implementeringen nedan härleder det via TextFrame.getSlide, Slide.getSlideNumber, och NotesSlide.getParentSlide. Den hanterar också text som finns i bildanteckningar.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getSlideNumber(textFrame) {
const parentSlide = textFrame.getSlide();
if (java.instanceOf(parentSlide, "com.aspose.slides.Slide")) {
return parentSlide.getSlideNumber();
}
if (java.instanceOf(parentSlide, "com.aspose.slides.NotesSlide")) {
return parentSlide.getParentSlide().getSlideNumber();
}
return null;
}
function createTextSearchCallback(results) {
return java.newProxy("com.aspose.slides.IFindResultCallback", {
foundResult: function(textFrame, sourceText, foundText, textPosition) {
results.push({
textFrame: textFrame,
sourceText: sourceText,
foundText: foundText,
textPosition: textPosition,
slideNumber: getSlideNumber(textFrame)
});
}
});
}
För ersättningsoperationer innehåller foundText den ursprungliga matchade texten, så callbacken kan registrera exakt vilka termer som ersattes.
Markera text
Använd metoden TextFrame.highlightText för att markera matchningar av bokstavlig text i en textruta. Skicka in TextSearchOptions för att styra sökningen.
Kodexemplet nedan markerar alla förekomster av tecknen “try” och markerar sedan endast hela ordet “to”.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const presentation = new aspose.slides.Presentation("sample.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().get_Item(0);
const substringSearchOptions = new aspose.slides.TextSearchOptions();
substringSearchOptions.setCaseSensitive(false);
const substringHighlightColor = java.getStaticFieldValue("java.awt.Color", "LIGHT_GRAY");
// Markera varje förekomst av "try" i textramen.
shape.getTextFrame().highlightText(
"try", substringHighlightColor, substringSearchOptions, null);
const wholeWordSearchOptions = new aspose.slides.TextSearchOptions();
wholeWordSearchOptions.setWholeWordsOnly(true);
wholeWordSearchOptions.setCaseSensitive(false);
const wholeWordHighlightColor = java.getStaticFieldValue("java.awt.Color", "MAGENTA");
// Markera endast hela ordet "to".
shape.getTextFrame().highlightText(
"to", wholeWordHighlightColor, wholeWordSearchOptions, null);
presentation.save("highlighted_text.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Resultatet:

Markera text med reguljära uttryck
Metoden TextFrame.highlightRegex markerar textmatchningar som hittas med ett reguljärt uttryck i en textruta.
Följande kod markerar alla ord som innehåller sju eller fler tecken:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("sample.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().get_Item(0);
const regex = Pattern.compile("\\b[^\\s]{7,}\\b");
const highlightColor = java.getStaticFieldValue("java.awt.Color", "YELLOW");
shape.getTextFrame().highlightRegex(regex, highlightColor, null);
presentation.save(
"highlighted_text_using_regex.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Resultatet:

Markera text i hela en presentation
Använd Presentation.highlightText och Presentation.highlightRegex för att söka i alla tillämpliga textrutor i en presentation. Följande exempel markerar ett bokstavligt uttryck och alla e‑postadresser:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(false);
const termHighlightColor = java.getStaticFieldValue("java.awt.Color", "ORANGE");
presentation.highlightText(
"confidential", termHighlightColor, searchOptions, null);
const emailRegex = Pattern.compile(
"\\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}\\b",
Pattern.CASE_INSENSITIVE);
const emailHighlightColor = java.getStaticFieldValue("java.awt.Color", "YELLOW");
presentation.highlightRegex(emailRegex, emailHighlightColor, null);
presentation.save("highlighted_presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Ersätt text i en textruta
Använd TextFrame.replaceText för bokstavlig text och TextFrame.replaceRegex för mönsterbaserad ersättning. Dessa metoder uppdaterar den matchade texten inom den befintliga textrutan, vilket behåller formateringen av den omgivande delen istället för att återskapa textrutan från en enkel sträng.
Följande exempel standardiserar en stavningsvariant och ersätter sedan versionsetiketter:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const slide = presentation.getSlides().get_Item(0);
const shape = slide.getShapes().get_Item(0);
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(false);
shape.getTextFrame().replaceText(
"colour", "color", searchOptions, null);
const versionRegex = Pattern.compile(
"\\bv\\d+(?:\\.\\d+)*\\b", Pattern.CASE_INSENSITIVE);
shape.getTextFrame().replaceRegex(versionRegex, "current version", null);
presentation.save("updated_text_frame.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Om en matchning sträcker sig över delar med olika formatering, granska utdata för att bekräfta vilken formatering som ska tillämpas på den ersatta texten.
Ersätt text i hela en presentation
Använd Presentation.replaceText och Presentation.replaceRegex för att tillämpa samma operationer i hela presentationen. Detta är användbart för mallstädning, terminologiska uppdateringar och redigering.
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
const Pattern = java.import("java.util.regex.Pattern");
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setWholeWordsOnly(true);
searchOptions.setCaseSensitive(true);
presentation.replaceText(
"Contoso", "Example Corp", searchOptions, null);
const accountNumberRegex = Pattern.compile("\\bACCT-\\d{6}\\b");
presentation.replaceRegex(accountNumberRegex, "ACCT-REDACTED", null);
presentation.save("updated_presentation.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
presentation.dispose();
}
Gruppera matchningar för rapportering
Eftersom varje insamlat resultat lagrar bildnummer och textruta kan applikationer gruppera matchningar för revision, rapportering eller granskning. Följande exempel grupperar resultaten först efter bild och sedan efter textruta:
const aspose = { slides: require("aspose.slides.via.java") };
const java = require("java");
function getSlideNumber(textFrame) {
const parentSlide = textFrame.getSlide();
if (java.instanceOf(parentSlide, "com.aspose.slides.Slide")) {
return parentSlide.getSlideNumber();
}
if (java.instanceOf(parentSlide, "com.aspose.slides.NotesSlide")) {
return parentSlide.getParentSlide().getSlideNumber();
}
return null;
}
const results = [];
const callback = java.newProxy("com.aspose.slides.IFindResultCallback", {
foundResult: function(textFrame, sourceText, foundText, textPosition) {
results.push({
textFrame: textFrame,
sourceText: sourceText,
foundText: foundText,
textPosition: textPosition,
slideNumber: getSlideNumber(textFrame)
});
}
});
const presentation = new aspose.slides.Presentation("presentation.pptx");
try {
const searchOptions = new aspose.slides.TextSearchOptions();
searchOptions.setCaseSensitive(false);
const highlightColor = java.getStaticFieldValue("java.awt.Color", "YELLOW");
presentation.highlightText(
"confidential", highlightColor, searchOptions, callback);
const matchesBySlide = new Map();
for (const result of results) {
const slideLabel = result.slideNumber === null ? "Other" : result.slideNumber;
if (!matchesBySlide.has(slideLabel)) {
matchesBySlide.set(slideLabel, new Map());
}
const matchesByTextFrame = matchesBySlide.get(slideLabel);
if (!matchesByTextFrame.has(result.textFrame)) {
matchesByTextFrame.set(result.textFrame, []);
}
matchesByTextFrame.get(result.textFrame).push(result);
}
for (const [slideLabel, matchesByTextFrame] of matchesBySlide) {
console.log("Slide: " + slideLabel);
for (const [textFrame, textFrameMatches] of matchesByTextFrame) {
console.log(" Text frame: " + textFrame.getText());
for (const result of textFrameMatches) {
console.log(
" '" + result.foundText + "' at position " +
result.textPosition + "; context: '" + result.sourceText + "'");
}
}
}
} finally {
presentation.dispose();
}
FAQ
Hur kan jag söka endast i en textruta istället för hela presentationen?
Hämta formens textruta och anropa TextFrame.highlightText, TextFrame.highlightRegex, TextFrame.replaceText, eller TextFrame.replaceRegex på den textrutan. Metoder på presentationsnivå bearbetar alla tillämpliga textrutor istället.
Hur kan jag matcha hela ord med korrekt versalisering?
Ställ in TextSearchOptions.setWholeWordsOnly och TextSearchOptions.setCaseSensitive till true, och skicka alternativen till en metod för markering eller ersättning av bokstavlig text. För reguljära uttryck definieras ordgränser och teckenkänslighet i själva Java Pattern.
Kan sökning och ersättning inkludera text i bildanteckningar?
Ja. Ställ in TextSearchOptions.setIncludeNotes till true när du använder en operation för bokstavlig text på presentationsnivå. Callback‑implementeringen som visas ovan mappar en matchning i en anteckningsbild tillbaka till dess föräldrabildsnummer.
Hur kan jag skapa en rapport utan att skanna presentationen en andra gång?
Skicka en Java‑resultat‑callback‑proxy till markerings‑ eller ersättningsoperationen. Callbacken får varje matchning medan operationen körs, så applikationen kan lagra källtext, matchad text, position, textruta och beräknat bildnummer för senare gruppering eller export.
Behåller ersättning av text dess formatering?
TextFrame.replaceText och TextFrame.replaceRegex ändrar den matchade texten inom den befintliga textrutan och behåller formateringen av den omgivande delen. Om en matchning sträcker sig över delar med olika formatering, inspektera resultatet för att säkerställa att ersättningen använder önskad stil.