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)
{
Remover as Peças cabeçalho e rodapé
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);
Eliminar as Referências de Cabeçalho e Rodapé
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 List
e, 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();
}
}
}
}