Uw leverancier is overgenomen, en “ACME Corp” is nu “Globex Ltd” in elk contract, schema, budget en slide‑deck dat het noemt. Met de GroupDocs.Editor MCP‑server die lokaal draait, doet Claude Desktop, Cursor of Copilot dit als een batch: voor elk bestand in de map roept het replace_text aan, behoudt de opmaak, rapporteert hoeveel voorkomens het heeft gewijzigd, en schrijft niets voor de bestanden die de oude naam nooit vermeldden. Er wordt niets geüpload, en geen origineel wordt overschreven:

Hernoem ACME Corp naar Globex Ltd in elk document in de map contracts, behoud de opmaak, en geef me een telling per bestand.

De stap‑voor‑stap versie staat in de documentatie: Hoe tekst te vinden en te vervangen in een map documenten zonder de opmaak te breken.

Waarom is dit een taak voor een tool en niet voor het model?

Omdat het resultaat controleerbaar moet zijn. Veertig documenten zijn te veel om met het blote oog te vergelijken, en een model dat “alle contracten heeft bijgewerkt” geeft je niets om tegen te controleren. Een zoek‑en‑vervang‑tool geeft je een aantal per bestand. De aantallen vormen het audit‑pad: je weet welke bestanden zijn gewijzigd, met hoeveel, en welke geen wijziging nodig hadden.

Het moet ook op de juiste manier saai zijn. De vetgedrukte naam van de partij blijft vetgedrukt, de kosten‑tabel behoudt zijn raster, de koppen behouden hun stijlen. Het model typt het document nooit opnieuw: de engine opent het, vervangt de woorden en schrijft een kopie. Een valkuil op server 26.10.0: die kopie wordt geschreven vanuit het HTML‑bewerkingsmodel van de engine, en een Word footer komt daardoor niet mee. Een contract dat de leverancier in de footer noemt, heeft in plaats daarvan de gepagineerde HTML‑rondreis nodig; de FAQ somt op wat een Word‑document behoudt.

Wat de agent ziet

Gefotografeerd vanuit GroupDocs.Editor.Mcp 26.10.0 tegen een kleine synthetische set: een service‑overeenkomst, een NDA, een welkomstbrief, een budget van drie bladen en een review‑deck van drie dia’s.

-> replace_text {"file":{"filePath":"contracts/msa-northwind.docx"},
     "find":"ACME Corp","replace":"Globex Ltd","wholeWord":true}
<- Replaced 6 occurrence(s) of 'ACME Corp' in 'msa-northwind.docx'
   Saved to: …/msa-northwind_edited.docx

-> replace_text {"file":{"filePath":"contracts/nda-northwind.docx"}, ...}
<- Replaced 1 occurrence(s) of 'ACME Corp' in 'nda-northwind.docx'

-> replace_text {"file":{"filePath":"contracts/welcome-letter.docx"}, ...}
<- Text replacement found no matches for 'ACME Corp' in
   'welcome-letter.docx'. No file was written.

-> replace_text {"file":{"filePath":"budget.xlsx"}, ..., "worksheet":1}
<- Replaced 1 occurrence(s) of 'ACME Corp' in worksheet 1 of 3 of
   'budget.xlsx'

-> replace_text {"file":{"filePath":"review.pptx"}, ..., "slide":1}
<- Replaced 1 occurrence(s) of 'ACME Corp' in slide 1 of 3 of
   'review.pptx'

Het rapport van de agent schrijft zichzelf: zes in de overeenkomst, één in de NDA, geen in de welkomstbrief, één in de budget‑samenvatting, één op de eerste dia.

De lus

contracts/ + budget.xlsx + review.pptx
   |
   +-- for each file:
   |      replace_text {"find":"ACME Corp","replace":"Globex Ltd",
   |                    "wholeWord":true}   (+ "worksheet"/"slide")
   |         -> "Replaced N occurrence(s) ..."  -> <name>_edited.<ext>
   |         -> "found no matches ... No file was written."
   |
   '-- report: file -> count; files with 0 listed separately

Twee gewoonten maken de lus betrouwbaar. Gebruik wholeWord: true voor namen, zodat “ACME Corp” niet overeenkomt binnen “ACME Corporation Holdings”. En vraag de agent om de bestanden met nul overeenkomsten te vermelden, want een nul in een bestand dat je verwachtte te wijzigen is het enige dat een tweede blik waard is.

De batch controleren voordat je iets vervangt

De bewerkte kopieën staan naast de originelen totdat je anders beslist, en dat is het moment om te controleren. Drie goedkope controles vangen bijna elk probleem. Vergelijk de aantallen per bestand met wat je verwachtte: een overeenkomst die de leverancier op elke pagina noemt, mag niet één voorkomen rapporteren. Vertrouw niet op het opnieuw uitvoeren van dezelfde vervanging: een zin die over opmaak is verdeeld, wordt de tweede keer ook gemist, en “found no matches” zou eruitzien als een groen licht. Vraag de agent om extract_html op elke bewerkte kopie uit te voeren; de platte‑tekst preview voegt de opmaak‑runs samen, zodat een overgebleven “ACME Corp” daar verschijnt. Variante spellingen (“Acme Corp.” met een punt, “ACME Corporation”) verdienen hun eigen doorloop met matchCase: false of een reguliere expressie. En open één bewerkt bestand van elk type, een contract, een werkmap en een deck, om de opmaak en de footer te bevestigen. Pas daarna verplaats je de _edited‑bestanden over de originelen, of laat je documentensysteem ze versiebeheer geven.

Patronen, hoofdlettergebruik en formaat in dezelfde oproep

De naamswijziging is het algemene geval, maar dezelfde tool dekt de rest van de “maak de bewoording consistent” familie. In dezelfde testuitvoering:

-> replace_text {"file":{"filePath":"contracts/nda-northwind.docx"},
     "find":"v2\\.3\\b","replace":"v2.4","regex":true,
     "outputName":"nda-northwind-v2.4.docx"}
<- Replaced 1 occurrence(s) of 'v2\.3\b' in 'nda-northwind.docx'

-> replace_text {"file":{"filePath":"contracts/nda-northwind.docx"},
     "find":"acme corp","replace":"Globex Ltd","matchCase":false,
     "format":"pdf"}
<- Replaced 1 occurrence(s) of 'acme corp' in 'nda-northwind.docx'
   Saved to: …/nda-northwind_edited.pdf

regex: true neemt een .NET‑reguliere expressie, wat de manier is waarop een versie‑verhoging of een datum‑formaatwijziging door een map gaat. matchCase: false vangt inconsistente hoofdlettergebruik. format: "pdf" bewerkt en converteert in één stap, voor de kopie die naar de andere kant gaat.

Een kanttekening voor code‑agents

Hetzelfde patroon werkt in een repository. Release‑notes in DOCX en specificaties in XLSX zijn onzichtbaar voor sed; Claude Code met deze server kan de versie‑string in beide verhogen als onderdeel van de release‑taak. Plaats de regel in de projectinstructies zodat de agent de tool gebruikt in plaats van te proberen Office‑bestanden te unzippen:

To change wording in .docx/.xlsx/.pptx/.pdf files in this repo, use the
groupdocs-editor MCP server's replace_text (wholeWord for names, regex for
versions). Report the count per file. Never rewrite an Office file by hand.

Eerlijke beperkingen

  • Matching gebeurt binnen één opmaak‑run. In onze overeenkomst werd een zevende “ACME Corp”, met “ACME” in cursief, niet vervangen, en het aantal van zes toonde dit. Zinnen die over stijlen zijn verdeeld hebben de HTML‑rondreis nodig.
  • Elk resultaat belandt in de root van de output‑map als <name>_edited.<ext>, zelfs wanneer het origineel in een submap stond. Niets wordt overschreven: een naam die al bestaat krijgt een nummer (msa-northwind_edited (1).docx), dus geef outputName wanneer namen kunnen botsen.
  • Op server 26.10.0 verliest de bewerkte kopie van een Word‑document zijn footer, en worden content‑controls afgevlakt naar platte tekst. Controleer documenten die de oude naam in een footer bevatten.
  • Spreadsheets en presentaties worden één werkblad of dia per oproep bewerkt. In evaluatiemodus kunnen alleen de eerste twee worden bewerkt, en de server meldt dat: “Evaluation mode edits only the first 2 slides of a presentation; slide 3 is beyond them.”
  • Evaluatiemodus voegt ook een banner‑regel toe aan elke output, en een PDF langer dan twee pagina’s wordt geweigerd.

Veelgestelde vragen

Kan het tekst vervangen in Word, Excel en PowerPoint in één batch?
Ja. De agent roept dezelfde tool per bestand aan en voegt worksheet of slide toe voor werkboeken en decks.

Hoe weet ik welke bestanden zijn gewijzigd?
Elke oproep retourneert het aantal, en bestanden zonder een overeenkomst worden helemaal niet weggeschreven. Vraag de agent om een tabel per bestand.

Worden de originelen overschreven?
Nee. Elke bewerking schrijft een nieuw bestand; de originelen blijven zoals ze waren totdat je ze zelf vervangt.

Dieper duiken