Ouvrir et ajouter du texte à un document de traitement de texte
Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin d’ouvrir et d’ajouter du texte par programmation à un document de traitement Word.
Comment ouvrir et ajouter du texte à un document
Le Kit de développement logiciel (SDK) Open XML vous permet de créer Word traitement de la structure et du contenu du document à l’aide de classes fortement typées qui correspondent à des éléments WordprocessingML. Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour ouvrir un document de traitement Word et y ajouter du texte. De plus, cette rubrique vous présente la structure de base d'un document WordprocessingML, les éléments XML associés et leurs classes de kit de développement Open XML correspondantes.
Créer un objet WordprocessingDocument
Dans le kit de développement Open XML, la classe WordprocessingDocument représente un package de documents Word. Pour ouvrir et utiliser un document Word, créez une instance de la classe WordprocessingDocument à partir du document. Une fois cette instance créée à partir du document, vous pouvez accéder à la partie principale du document qui contient le texte du document. Ce texte est représenté dans le package au format XML à l'aide du balisage WordprocessingML.
Pour créer l'instance de classe à partir du document, appelez l'une des méthodes Open. Il vous en est proposé plusieurs, chacune avec une signature différente. L’exemple de code dans cette rubrique utilise la méthode Open(String, Boolean) avec une signature qui nécessite deux paramètres. Le premier paramètre accepte une chaîne de chemin d’accès complet qui représente le document à ouvrir. Le deuxième paramètre est true ou false et indique si vous voulez que le fichier soit ouvert pour modification. Les modifications que vous apportez au document ne seront pas enregistrées si ce paramètre est false.
L'exemple de code suivant appelle la méthode Open.
// Open a WordprocessingDocument for editing using the filepath.
WordprocessingDocument wordprocessingDocument =
WordprocessingDocument.Open(filepath, true);
Une fois le package de documents Word ouvert, vous pouvez ajouter du texte à la partie principale du document. Pour accéder au corps de la partie principale du document, attribuez une référence au corps du document existant, comme indiqué dans l'exemple de code suivant.
// Assign a reference to the existing document body.
Body body = wordprocessingDocument.MainDocumentPart.Document.Body;
Structure d’un document WordProcessingML
La structure de base d’un document WordProcessingML se compose des éléments document et body , suivis d’un ou plusieurs éléments de niveau bloc tels que p, qui représente un paragraphe. Un paragraphe contient un ou plusieurs éléments r. Le r signifie « run » (exécution), qui est une zone de texte avec un ensemble de propriétés courant, comme par exemple la mise en forme. Une exécution contient un ou plusieurs éléments t. L'élément t contient une plage de texte. L’exemple de code suivant montre le balisage WordprocessingML pour un document qui contient le texte « Exemple de texte ».
<w:document xmlns:w="https://schemas.openxmlformats.org/wordprocessingml/2006/main">
<w:body>
<w:p>
<w:r>
<w:t>Example text.</w:t>
</w:r>
</w:p>
</w:body>
</w:document>
À l’aide du Kit de développement logiciel (SDK) Open XML, vous pouvez créer une structure de document et du contenu à l’aide de classes fortement typées qui correspondent à des éléments WordprocessingML . Vous trouverez ces classes dans l'espace de noms DocumentFormat.OpenXml.Wordprocessing . Le tableau suivant répertorie les noms des classes qui correspondent aux éléments document, body, p, r et t.
Élément WordprocessingML | Classe du Kit de développement logiciel (SDK) Open XML | Description |
---|---|---|
document | Document | Élément racine de la partie principale du document. |
body | Body | Conteneur des structures de niveau bloc, telles que paragraphs, tables, annotations et autres structures décrites dans la spécification ISO/IEC 29500. |
p | Paragraph | Paragraphe. |
r | Run | Exécution. |
t | Text | Plage de texte. |
Pour plus d’informations sur la structure globale des parties et éléments d’un document WordprocessingML, consultez Structure d’un document WordprocessingML.
Générer le balisage WordprocessingML pour ajouter du texte
Lorsque vous avez accès au corps de la partie principale du document, ajoutez du texte en ajoutant des instances des classes Paragraph, Run et Text. Cette action génère le balisage WordprocessingML requis. L'exemple de code suivant ajoute le paragraphe, l'exécution et le texte.
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
Exemple de code
L'exemple de méthode OpenAndAddTextToWordDocument présenté ici peut être utilisé pour ouvrir un document Word et y ajouter du texte à l'aide du kit de développement Open XML. Pour appeler cette méthode, transmettez un nom de fichier de chemin d'accès complet comme premier paramètre et le texte à ajouter comme deuxième paramètre. Par exemple, l'exemple de code suivant ouvre le fichier Letter.docx dans le dossier Documents publics et y ajoute du texte.
string strDoc = @"C:\Users\Public\Documents\Letter.docx";
string strTxt = "Append text in body - OpenAndAddTextToWordDocument";
OpenAndAddTextToWordDocument(strDoc, strTxt);
Voici un exemple de code complet en C# et Visual Basic.
La méthode OpenAndAddTextToWordDocument n'inclut pas un appel explicite de Save. Ceci est dû au fait que la fonctionnalité d'enregistrement automatique est activée par défaut et n'a pas été désactivée dans l'appel de la méthode Open via l'utilisation de OpenSettings.
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
OpenAndAddTextToWordDocument(args[0], args[1]);
static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
// Open a WordprocessingDocument for editing using the filepath.
WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true);
if (wordprocessingDocument is null)
{
throw new ArgumentNullException(nameof(wordprocessingDocument));
}
// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;
// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));
// Dispose the handle explicitly.
wordprocessingDocument.Dispose();
}