Compartilhar via


Remover os cabeçalhos e rodapés de um documento de processamento de texto

Este tópico mostra como utilizar as classes no SDK Open XML para o Office para remover programaticamente todos os cabeçalhos e rodapés num documento de processamento de palavras. Contém um método de exemplo RemoveHeadersAndFooters para ilustrar esta tarefa.

Método RemoveHeadersAndFooters

Pode utilizar o RemoveHeadersAndFooters método para remover todas as informações de cabeçalho e rodapé de um documento de processamento de palavras. Tenha em atenção que não só pode eliminar as partes do cabeçalho e rodapé do armazenamento de documentos, como também tem de eliminar as referências a essas partes do documento. O código de exemplo demonstra ambos os passos na operação. O RemoveHeadersAndFooters método aceita um único parâmetro, uma cadeia que indica o caminho do ficheiro que pretende modificar.

static void RemoveHeadersAndFooters(string filename)

A listagem de código completa para o método pode ser encontrada na secção Código de Exemplo .

Chamar o Método de Exemplo

Para chamar o método de exemplo, transmita uma cadeia para o primeiro parâmetro que contém o nome de ficheiro do documento que pretende modificar, conforme mostrado no exemplo de código seguinte.

string filename = args[0];

RemoveHeadersAndFooters(filename);

Como Funciona o Código

O RemoveHeadersAndFooters método funciona com o documento que especificar, eliminando todas as partes do cabeçalho e rodapé e referências a essas partes. O código começa por abrir o documento, utilizando o Open método e indicando que o documento deve ser aberto para acesso de leitura/escrita (o parâmetro verdadeiro final). Dado o documento aberto, o código utiliza a MainDocumentPart propriedade para navegar para o documento main, armazenando a referência numa variável chamada 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;

Confirmar Existência de Cabeçalho/Rodapé

Tendo em conta uma referência à parte do documento, o código determina, em seguida, se tem algum trabalho a fazer, ou seja, se o documento contém cabeçalhos ou rodapés. Para decidir, o código chama o Count método das HeaderParts propriedades e FooterParts da parte do documento e, se devolver um valor superior a 0, o código continua. Tenha em atenção que as HeaderParts propriedades e FooterParts devolvem IEnumerable<T> um ou HeaderPartFooterPart objetos, respetivamente.

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

Tendo em conta uma coleção de referências a partes de cabeçalho e rodapé, pode escrever código para eliminar cada uma individualmente, mas isso não é necessário devido ao SDK Open XML. Em vez disso, pode chamar o DeleteParts método ao transmitir a coleção de peças a serem eliminadas─este método simples fornece um atalho para eliminar uma coleção de peças. Por conseguinte, as seguintes linhas de código ocupam o lugar do ciclo que, de outra forma, teria de escrever por si próprio.

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

Neste momento, o código eliminou as partes do cabeçalho e rodapé, mas o documento ainda contém referências órfãs a essas partes. Antes de as referências órfãs poderem ser removidas, o código tem de obter uma referência ao conteúdo do documento (ou seja, ao conteúdo XML contido na parte do documento main).

Para remover as referências encalhadas, o código obtém primeiro uma coleção de elementos HeaderReference, converte a coleção num Liste, em seguida, percorre a coleção, chamando o Remove() método para cada elemento encontrado. Tenha em atenção que o código converte o IEnumerable devolvido pelo Descendants() método num List para que possa eliminar itens da lista e que o HeaderReference tipo fornecido pelo SDK Open XML facilita a referência a elementos do tipo HeaderReference no conteúdo XML. (Sem essa ajuda adicional, teria de trabalhar diretamente com os detalhes do conteúdo XML.) Depois de remover todos os cabeçalhos, o código repete a operação com os elementos do rodapé.

// 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();
}

Código de exemplo

Segue-se o exemplo de código completo RemoveHeadersAndFooters em C# e 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();
            }
        }
    }
}