Rechercher et remplacer du texte dans une partie de document
Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office pour rechercher et remplacer par programmation une valeur de texte dans un document de traitement de texte.
Packages et composants Document
Un document Open XML est stocké sous forme de package, dont le format est défini par la norme ISO/IEC 29500. Le package peut contenir plusieurs parties avec des relations entre elles. La relation entre les parties détermine la catégorie du document. Un document peut être défini comme un document de traitement de texte si son élément de relation de package contient une relation avec une partie principale de document. Si son élément de relation de package contient une relation avec une partie de présentation, il peut être défini comme un document de présentation. Si son élément de relation de package contient une relation avec une partie de classeur, il est défini en tant que feuille de calcul. Dans cette rubrique, vous utiliserez un package de documents de traitement de texte.
Obtention d’un objet WordprocessingDocument
Dans l’exemple de code, vous commencez par ouvrir le fichier de traitement de texte en instanciant la WordprocessingDocument classe, comme indiqué dans l’instruction suivante using
. Dans la même instruction, vous ouvrez le fichier document
de traitement de texte à l’aide de la Open méthode , avec le paramètre booléen défini sur true
pour permettre la modification du document.
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
Avec v3.0.0+ la Close() méthode a été supprimée au profit de l’instruction using.
Il garantit que la Dispose() méthode est automatiquement appelée lorsque l’accolade fermante est atteinte. Le bloc qui suit l’instruction using établit une étendue pour l’objet créé ou nommé dans l’instruction using. Étant donné que la WordprocessingDocument classe du Kit de développement logiciel (SDK) Open XML enregistre et ferme automatiquement l’objet dans le cadre de son IDisposable implémentation, et que Dispose() est appelée automatiquement lorsque vous quittez le bloc, vous n’avez pas à appeler Save() explicitement ou Dispose() tant que vous utilisez une using
instruction.
Exemple de code
L'exemple suivant montre comment effectuer rapidement et simplement des recherches et des remplacements. Il est possible que cette méthode ne soit pas fiable, car elle récupère le document XML sous forme de chaîne. Selon l'expression régulière utilisée, il se peut que vous remplaciez accidentellement les balises XML et que vous endommagiez le document. Si vous souhaitez simplement effectuer une recherche dans un document, mais pas remplacer le contenu, vous pouvez utiliser MainDocumentPart.Document.InnerText
.
Cet exemple montre également comment utiliser une expression régulière pour rechercher et remplacer la valeur de texte« Hello World ! » stockée dans un fichier de traitement de texte par la valeur « Bonjour tout le monde ! ». Pour appeler la méthode SearchAndReplace
, vous pouvez utiliser l’exemple suivant.
SearchAndReplace(args[0]);
Une fois le programme exécuté, vous pouvez consulter le fichier pour voir les modifications apportées au texte, « Hello world! ».
Voici un exemple de code complet en C# et Visual Basic.
static void SearchAndReplace(string document)
{
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
{
string? docText = null;
if (wordDoc.MainDocumentPart is null)
{
throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
}
using (StreamReader sr = new StreamReader(wordDoc.MainDocumentPart.GetStream()))
{
docText = sr.ReadToEnd();
}
Regex regexText = new Regex("Hello World!");
docText = regexText.Replace(docText, "Hi Everyone!");
using (StreamWriter sw = new StreamWriter(wordDoc.MainDocumentPart.GetStream(FileMode.Create)))
{
sw.Write(docText);
}
}
}