Table des matières (TOC) dans un document Word vous donne un aperçu de ce qu’un document contient. De plus, il vous permet de naviguer vers une section particulière du document. Dans cet article, vous apprendrez à utiliser par programmation une table des matières dans des documents Word à l’aide de C#. En particulier, cet article explique comment ajouter, extraire, mettre à jour ou supprimer une table des matières dans des documents Word.

API C# pour travailler avec la table des matières dans un document Word

Afin de travailler avec des tables des matières dans des documents Word, nous utiliserons Aspose.Words for .NET. Ladite API est conçue pour exécuter des fonctionnalités d’automatisation Word de base et avancées à partir d’applications .NET. De plus, il vous donne une bonne maîtrise de la manipulation de la table des matières dans les documents Word. Vous pouvez soit télécharger l’API ou l’installer à l’aide de NuGet.

PM> Install-Package Aspose.Words

Ajouter une table des matières dans un document Word à l’aide de C#

Voici les étapes pour ajouter une table des matières au document Word en utilisant Aspose.Words for .NET.

L’exemple de code suivant montre comment ajouter une table des matières dans un document Word en C#.

// Pour des exemples complets et des fichiers de données, rendez-vous sur https://github.com/aspose-words/Aspose.Words-for-.NET
// Chemin d'accès au répertoire des documents.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
// Initialiser le document.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

// Insérer une table des matières au début du document.
builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");

// La table des matières nouvellement insérée sera initialement vide.
// Il doit être rempli en mettant à jour les champs du document.
doc.UpdateFields();
dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
doc.Save(dataDir);

Extraire la table des matières d’un document Word à l’aide de C#

Voici les étapes pour extraire les champs d’une table des matières dans un document Word.

  • Chargez le document Word à l’aide de la classe Document.
  • Parcourez chaque Field du document à l’aide de la collection Document.Range.Fields.
  • Vérifiez si le type de champ est un lien hypertexte à l’aide de la propriété Field.Type.
  • Vérifiez si le champ se trouve sous la table de la section des matières.
  • Récupérez les informations du champ et imprimez-les.

L’exemple de code suivant montre comment extraire une table des matières d’un document Word à l’aide de C#.

// Chemin d'accès au répertoire des documents.
string dataDir = RunExamples.GetDataDir_WorkingWithDocument();

string fileName = "TOC.doc";
Aspose.Words.Document doc = new Aspose.Words.Document(dataDir + fileName);

foreach (Field field in doc.Range.Fields)
{
	if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldHyperlink))
	{
		FieldHyperlink hyperlink = (FieldHyperlink)field;
		if (hyperlink.SubAddress != null && hyperlink.SubAddress.StartsWith("_Toc"))
		{
			Paragraph tocItem = (Paragraph)field.Start.GetAncestor(NodeType.Paragraph);
			Console.WriteLine(tocItem.ToString(SaveFormat.Text).Trim());
			Console.WriteLine("------------------");
			if (tocItem != null)
			{
				Bookmark bm = doc.Range.Bookmarks[hyperlink.SubAddress];
				// Obtenir l'emplacement vers lequel cet élément de la table des matières pointe
				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
				Console.WriteLine(pointer.ToString(SaveFormat.Text));
			}
		} // End If
	}// End If
}// End Foreach

Mettre à jour la table des matières dans un document Word à l’aide de C#

Chaque fois que vous ajoutez du contenu à un document Word, vous devez mettre à jour la table des matières. Pour le faire par programme, il vous suffit d’appeler la méthode Document.UpdateFields() avant d’enregistrer le document.

Supprimer la table des matières dans un document Word à l’aide de C#

Aspose.Words for .NET vous permet également de supprimer la table des matières d’un document Word. Voici les étapes pour effectuer cette opération.

  • Commencez par charger le document Word à l’aide de la classe Document.
  • Obtenez et stockez les nœuds FieldStart de chaque table des matières dans un tableau.
  • Parcourez les nœuds jusqu’à ce que vous obteniez le nœud de type FieldEnd (fin de la table des matières).
  • Supprimez les nœuds à l’aide de la méthode Node.Remove() et enregistrez le document mis à jour.

L’exemple de code suivant montre comment supprimer la table des matières d’un document Word en C#.

// Pour des exemples complets et des fichiers de données, rendez-vous sur https://github.com/aspose-words/Aspose.Words-for-.NET
public static void Run()
{
    
    // Chemin d'accès au répertoire des documents.
    string dataDir = RunExamples.GetDataDir_WorkingWithStyles();

    // Ouvrez un document contenant une table des matières.
    Document doc = new Document(dataDir + "Document.TableOfContents.doc");

    // Supprimez la première table des matières du document.
    RemoveTableOfContents(doc, 0);

    dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
    // Enregistrez la sortie.
    doc.Save(dataDir);
    
    Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
}
///<summary>
/// Supprime le champ de table des matières spécifié du document.
///</summary>
///<param name="doc"> Le document duquel supprimer le champ.</param>
///<param name="index"> Index de base zéro de la table des matières à supprimer.</param>
public static void RemoveTableOfContents(Document doc, int index)
{
    // Stockez les nœuds FieldStart des champs TOC dans le document pour un accès rapide.
    ArrayList fieldStarts = new ArrayList();
    // Il s'agit d'une liste pour stocker les nœuds trouvés dans la table des matières spécifiée. Ils seront supprimés
    // A la fin de cette méthode.
    ArrayList nodeList = new ArrayList();

    foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
    {
        if (start.FieldType == FieldType.FieldTOC)
        {
            // Ajoutez tous les FieldStarts qui sont de type FieldTOC.
            fieldStarts.Add(start);
        }
    }

    // Assurez-vous que la table des matières spécifiée par l'index transmis existe.
    if (index > fieldStarts.Count - 1)
        throw new ArgumentOutOfRangeException("TOC index is out of range");

    bool isRemoving = true;
    // Obtenez le FieldStart de la table des matières spécifiée.
    Node currentNode = (Node)fieldStarts[index];

    while (isRemoving)
    {
        // Il est plus sûr de stocker ces nœuds et de les supprimer tous en même temps plus tard.
        nodeList.Add(currentNode);
        currentNode = currentNode.NextPreOrder(doc);

        // Une fois que nous rencontrons un nœud FieldEnd de type FieldTOC, nous savons que nous sommes à la fin
        // De la table des matières actuelle et nous pouvons nous arrêter ici.
        if (currentNode.NodeType == NodeType.FieldEnd)
        {
            FieldEnd fieldEnd = (FieldEnd)currentNode;
            if (fieldEnd.FieldType == FieldType.FieldTOC)
                isRemoving = false;
        }
    }

    // Supprimez tous les nœuds trouvés dans la table des matières spécifiée.
    foreach (Node node in nodeList)
    {
        node.Remove();
    }
}

Obtenez une licence API gratuite

Si vous souhaitez essayer l’API sans limitation d’évaluation, vous pouvez obtenir une licence temporaire gratuite.

Conclusion

Dans cet article, vous avez appris à utiliser une table des matières dans un document Word à l’aide de C#. Le guide étape par étape et les exemples de code ont montré comment ajouter, mettre à jour, extraire et supprimer la table des matières des documents Word. Vous pouvez en savoir plus sur l’API d’automatisation C# Word à l’aide de documentation. Si vous avez des questions ou des préoccupations, veuillez nous contacter via notre forum.

Voir également