Partager via


Modifier le texte d’un tableau dans un document de traitement de texte

Cette rubrique montre comment utiliser le Kit de développement logiciel (SDK) Open XML pour Office pour modifier par programmation le texte d’un tableau dans un document de traitement de texte existant.

Ouvrir le document existant

Pour ouvrir un document existant, instanciez la classe WordprocessingDocument comme indiqué dans l'instruction using suivante. Dans la même instruction, ouvrez le fichier de traitement de texte au chemin d’accès de fichier spécifié à l’aide de la méthode Open , avec le paramètre booléen défini sur true pour permettre la modification du document.

    using (WordprocessingDocument doc =
           WordprocessingDocument.Open(filepath, true)) 
    { 
       // Insert other code here. 
    }

L'instruction using offre une alternative recommandée pour la séquence .Open, .Save, .Close standard. Elle garantit que la méthode Dispose (méthode interne utilisée par le kit de développement Open XML pour nettoyer les ressources) est automatiquement appelée lorsque l'accolade de fermeture est atteinte. Le bloc qui suit l’instruction using établit une étendue pour l’objet créé ou nommé dans l’instruction using , en l’occurrence la documentation. Étant donné que la classe WordprocessingDocument dans le Kit de développement logiciel (SDK) Open XML enregistre et ferme automatiquement l’objet dans le cadre de son implémentation System.IDisposable , et que Dispose est automatiquement appelé lorsque vous quittez le bloc, vous n’avez pas à appeler explicitement Save and Close, tant que vous utilisez l’utilisation.

Structure d’un tableau

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.

Le document peut contenir un tableau, comme dans cet exemple. Un tableau est un ensemble de paragraphes (et d’autre contenu au niveau bloc) disposés en lignes et en colonnes. Les tableaux dans WordprocessingML sont définis via l’élément tbl, qui est analogue à la balise HTML

. Considérons un tableau ayant une seule cellule vide (c’est-à-dire, un tableau avec une ligne et une colonne) et des bordures à 1 point de tous les côtés. Ce tableau est représenté par l’exemple de code WordprocessingML suivant.

    <w:tbl>
      <w:tblPr>
        <w:tblW w:w="5000" w:type="pct"/>
        <w:tblBorders>
          <w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:left w:val="single" w:sz="4 w:space="0" w:color="auto"/>
          <w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
          <w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
        </w:tblBorders>
      </w:tblPr>
      <w:tblGrid>
        <w:gridCol w:w="10296"/>
      </w:tblGrid>
      <w:tr>
        <w:tc>
          <w:tcPr>
            <w:tcW w:w="0" w:type="auto"/>
          </w:tcPr>
          <w:p/>
        </w:tc>
      </w:tr>
    </w:tbl>

Ce tableau spécifie des propriétés à l'échelle du tableau : 100% de la largeur de la page à l'aide de l'élément tblW, un ensemble de bordures de tableau à l'aide de l'élément tblBorders, la grille de tableau, qui définit un ensemble de bords verticaux partagés à l'intérieur du tableau à l'aide de l'élément tblGrid, et une seule ligne de tableau à l'aide de l'élément tr.

Fonctionnement de l’exemple de code

Dans le code d’exemple, après avoir ouvert le document dans l’instruction using, vous localisez le premier tableau dans le document. Puis, vous localisez la seconde ligne du tableau en recherchant la ligne d’index 1. Ensuite, vous localisez la troisième cellule dans cette ligne d’index 2, comme dans l’exemple suivant.

    // Find the first table in the document.
    Table table =
        doc.MainDocumentPart.Document.Body.Elements<Table>().First();

    // Find the second row in the table.
    TableRow row = table.Elements<TableRow>().ElementAt(1);

    // Find the third cell in the row.
    TableCell cell = row.Elements<TableCell>().ElementAt(2);

Après avoir localisé la cellule cible, vous localisez la première séquence dans le premier paragraphe de la cellule et remplacez le texte par le texte passé en paramètre. L’exemple de code suivant illustre ces opérations.

    Paragraph p = cell.Elements<Paragraph>().First();
    Run r = p.Elements<Run>().First();
    Text t = r.Elements<Text>().First();
    t.Text = txt;

Modifier le texte d’une cellule d’un tableau

L’exemple de code suivant montre comment modifier le texte dans la cellule de tableau spécifiée dans un document de traitement de texte. L’exemple de code s’attend à ce que le document, dont le nom de fichier et le chemin d’accès sont passés comme argument de la méthode ChangeTextInCell, contienne un tableau. Il s’attend également à ce que le tableau ait au moins deux lignes et trois colonnes, et à ce qu’il contienne du texte dans la cellule située sur la deuxième ligne, dans la troisième colonne. Lorsque vous appelez la méthode ChangeTextInCell dans votre programme, le texte dans la cellule à l’emplacement spécifié est remplacé par le texte passé comme second argument à la méthode ChangeTextInCell. Dans le tableau suivant, le texte « Le texte de l’exemple d’API » a été utilisé.

Texte Texte Texte
Texte Du texte The text from the API example

Exemple de code

La méthode ChangeTextinCell remplace le texte dans la seconde ligne à la troisième colonne du premier tableau trouvé dans le fichier. Vous l’appelez en lui passant le chemin d’accès complet au fichier comme premier paramètre, et le texte à utiliser comme second paramètre. Par exemple, l’appel suivant à la méthode ChangeTextInCell modifie le texte dans la cellule spécifiée en « Texte de l’exemple d’API ».

    ChangeTextInCell(@"c:\Users\Public\Documents\word4.docx",
    "The text from the API example");

L’exemple ci-après contient le code complet.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Linq;

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

// Change the text in a table in a word processing document.
static void ChangeTextInCell(string filePath, string txt)
{
    // Use the file name and path passed in as an argument to 
    // open an existing document.            
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filePath, true))
    {
        if (doc.MainDocumentPart is null || doc.MainDocumentPart.Document.Body is null)
        {
            throw new ArgumentNullException("MainDocumentPart and/or Body is null.");
        }

        // Find the first table in the document.
        Table table = doc.MainDocumentPart.Document.Body.Elements<Table>().First();

        // Find the second row in the table.
        TableRow row = table.Elements<TableRow>().ElementAt(1);

        // Find the third cell in the row.
        TableCell cell = row.Elements<TableCell>().ElementAt(2);

        // Find the first paragraph in the table cell.
        Paragraph p = cell.Elements<Paragraph>().First();

        // Find the first run in the paragraph.
        Run r = p.Elements<Run>().First();

        // Set the text for the run.
        Text t = r.Elements<Text>().First();
        t.Text = txt;
    }
}