Partager via


Supprimer les en-têtes et pieds de page d’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 de supprimer par programmation tous les en-têtes et pieds de page d’un document de traitement de texte. Il contient un exemple RemoveHeadersAndFooters de méthode pour illustrer cette tâche.

Méthode RemoveHeadersAndFooters

Vous pouvez utiliser la RemoveHeadersAndFooters méthode pour supprimer toutes les informations d’en-tête et de pied de page d’un document de traitement de texte. N'oubliez pas, vous ne devez pas uniquement supprimer les parties d'en-tête et de pied de page du stockage de documents, mais vous devez également supprimer les références à ces parties du document. L'exemple de code montre les deux étapes de l'opération. La RemoveHeadersAndFooters méthode accepte un seul paramètre, une chaîne qui indique le chemin du fichier que vous souhaitez modifier.

static void RemoveHeadersAndFooters(string filename)

La liste de code complète pour la méthode se trouve dans la section Exemple de code.

Appel de la méthode de l’exemple

Pour appeler la méthode de l'exemple, transmettez une chaîne pour le premier paramètre qui contient le nom de fichier du document que vous voulez modifier comme indiqué dans l'exemple de code suivant.

string filename = args[0];

RemoveHeadersAndFooters(filename);

Fonctionnement du code

La RemoveHeadersAndFooters méthode fonctionne avec le document que vous spécifiez, en supprimant toutes les parties d’en-tête et de pied de page et les références à ces parties. Le code commence par ouvrir le document, en utilisant la Open méthode et en indiquant que le document doit être ouvert pour l’accès en lecture/écriture (paramètre true final). Étant donné le document ouvert, le code utilise la MainDocumentPart propriété pour accéder au document main, en stockant la référence dans une variable nommée docPart.

// Given a document name, remove all of the headers and footers
// from the document.
using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true))
{
    if (doc.MainDocumentPart is null)
    {
        throw new ArgumentNullException("MainDocumentPart is null.");
    }

    // Get a reference to the main document part.
    var docPart = doc.MainDocumentPart;

Vérification de l’existence de l’en-tête/du pied de page

En fonction d’une référence au composant de document, le code détermine ensuite s’il a du travail à effectuer, c’est-à-dire si le document contient des en-têtes ou des pieds de page. Pour décider, le code appelle la Count méthode des HeaderParts propriétés et FooterParts du composant de document, et si l’une ou l’autre retourne une valeur supérieure à 0, le code continue. N’oubliez pas que les HeaderParts propriétés et FooterParts retournent chacune un IEnumerable<T> d’objets HeaderPart ou FooterPart , respectivement.

// Count the header and footer parts and continue if there 
// are any.
if (docPart.HeaderParts.Count() > 0 || docPart.FooterParts.Count() > 0)
{

Avec une collection de références à des parties d’en-tête et de pied de page, vous pouvez écrire du code pour supprimer chacune d’elles individuellement, mais cela n’est pas nécessaire en raison du Kit de développement logiciel (SDK) Open XML. Au lieu de cela, vous pouvez appeler la DeleteParts méthode, en passant la collection de parties à supprimer. Cette méthode simple fournit un raccourci pour supprimer une collection de composants. Ainsi, les lignes de code suivantes remplacent la boucle de code que vous auriez dû écrire vous-même.

// Remove the header and footer parts.
docPart.DeleteParts(docPart.HeaderParts);
docPart.DeleteParts(docPart.FooterParts);

À ce stade, le code a supprimé les parties d'en-tête et de pied de page, mais le document contient encore des références orphelines à ces parties. Pour pouvoir supprimer les références orphelines, le code doit récupérer une référence au contenu du document (c'est-à-dire, au contenu XML présent dans la partie du document principal).

Pour supprimer les références bloquées, le code récupère d’abord une collection d’éléments HeaderReference, convertit la collection en , puis effectue une Listboucle dans la collection, en appelant la Remove() méthode pour chaque élément trouvé. Notez que le code convertit le IEnumerable retourné par la Descendants() méthode en un List afin qu’il puisse supprimer des éléments de la liste, et que le HeaderReference type fourni par le Kit de développement logiciel (SDK) Open XML facilite la référence aux éléments de type HeaderReference dans le contenu XML. (Sans cette aide supplémentaire, vous auriez dû travailler directement avec les détails du contenu XML.) Une fois tous les en-têtes supprimés, le code répète l’opération pour les éléments de pied de page.

// Get a reference to the root element of the main
// document part.
Document document = docPart.Document;

// Remove all references to the headers and footers.

// First, create a list of all descendants of type
// HeaderReference. Then, navigate the list and call
// Remove on each item to delete the reference.
var headers = document.Descendants<HeaderReference>().ToList();

foreach (var header in headers)
{
    header.Remove();
}

// First, create a list of all descendants of type
// FooterReference. Then, navigate the list and call
// Remove on each item to delete the reference.
var footers = document.Descendants<FooterReference>().ToList();

foreach (var footer in footers)
{
    footer.Remove();
}

Exemple de code

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

// Remove all of the headers and footers from a document.
static void RemoveHeadersAndFooters(string filename)
{
    // Given a document name, remove all of the headers and footers
    // from the document.
    using (WordprocessingDocument doc = WordprocessingDocument.Open(filename, true))
    {
        if (doc.MainDocumentPart is null)
        {
            throw new ArgumentNullException("MainDocumentPart is null.");
        }

        // Get a reference to the main document part.
        var docPart = doc.MainDocumentPart;

        // Count the header and footer parts and continue if there 
        // are any.
        if (docPart.HeaderParts.Count() > 0 || docPart.FooterParts.Count() > 0)
        {

            // Remove the header and footer parts.
            docPart.DeleteParts(docPart.HeaderParts);
            docPart.DeleteParts(docPart.FooterParts);

            // Get a reference to the root element of the main
            // document part.
            Document document = docPart.Document;

            // Remove all references to the headers and footers.

            // First, create a list of all descendants of type
            // HeaderReference. Then, navigate the list and call
            // Remove on each item to delete the reference.
            var headers = document.Descendants<HeaderReference>().ToList();

            foreach (var header in headers)
            {
                header.Remove();
            }

            // First, create a list of all descendants of type
            // FooterReference. Then, navigate the list and call
            // Remove on each item to delete the reference.
            var footers = document.Descendants<FooterReference>().ToList();

            foreach (var footer in footers)
            {
                footer.Remove();
            }
        }
    }
}