Partager via


Ajouter un nouveau composant de document à un package

Cette rubrique montre comment utiliser les classes du Kit de développement logiciel (SDK) Open XML pour Office afin d’ajouter un composant de document (fichier) à un document de traitement de texte par programmation.

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.

Obtenir un objet WordprocessingDocument

Le code commence par ouvrir un fichier de package en passant un nom de fichier à l’une des méthodes surchargées Open du WordprocessingDocument qui prend une chaîne et une valeur booléenne qui spécifie si le fichier doit être ouvert pour modification ou pour un accès en lecture seule. Dans ce cas, la valeur true booléenne spécifie que le fichier doit être ouvert en mode lecture/écriture.

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.

Structure d’un document WordProcessingML

La structure de base d’un WordProcessingML document se compose des document éléments 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 r éléments. l’acronyme r de run, qui est une région de texte avec un ensemble commun de propriétés, telles que la mise en forme. Une exécution contient un ou plusieurs t éléments. L’élément t contient une plage de texte. L’exemple de code suivant montre le WordprocessingML balisage d’un document qui contient le texte « Exemple de texte ».

    <w:document xmlns:w="http://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 à WordprocessingML des éléments. Vous trouverez ces classes dans l’espace de noms . Le tableau suivant répertorie les noms de classes des classes qui correspondent aux documentéléments , body, p, ret 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.

Fonctionnement de l’exemple de code

Après avoir ouvert le document pour modification, dans l’instruction using , en tant qu’objet WordprocessingDocument , le code crée une référence au MainDocumentPart composant et ajoute un nouveau composant XML personnalisé. Il lit ensuite le contenu du fichier externe qui contient le code XML personnalisé et l’écrit dans le CustomXmlPart composant.

Remarque

Pour utiliser le nouveau composant de document dans le document, ajoutez un lien au composant de document dans le composant de relation pour le nouveau composant.

MainDocumentPart mainPart = wordDoc.MainDocumentPart ?? wordDoc.AddMainDocumentPart();

CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);

using (FileStream stream = new FileStream(fileName, FileMode.Open))
{
    myXmlPart.FeedData(stream);
}

Exemple de code

Le code suivant ajoute un nouveau composant Document qui contient du code XML personnalisé à partir d’un fichier externe, puis remplit ce composant. Pour appeler la AddCustomXmlPart méthode dans votre programme, utilisez l’exemple suivant qui modifie un fichier en lui ajoutant un nouveau composant de document.

string document = args[0];
string fileName = args[1];

AddNewPart(args[0], args[1]);

Remarque

Avant d’exécuter le programme, remplacez l’extension de fichier Word .docx par .zip, puis examinez le contenu du fichier zip. Remodifiez ensuite l’extension en .docx, puis exécutez le programme. Après avoir exécuté le programme, remplacez à nouveau l’extension de fichier par .zip, puis examinez le contenu du fichier. Vous verrez un dossier supplémentaire nommé « customXML ». Ce dossier contient le fichier XML qui représente la partie ajoutée

Voici l'exemple de code complet en C# et Visual Basic.

static void AddNewPart(string document, string fileName)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        MainDocumentPart mainPart = wordDoc.MainDocumentPart ?? wordDoc.AddMainDocumentPart();

        CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);

        using (FileStream stream = new FileStream(fileName, FileMode.Open))
        {
            myXmlPart.FeedData(stream);
        }
    }
}

Voir aussi