Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se muestra cómo usar las clases del SDK de Open XML para Office para quitar mediante programación todos los encabezados y pies de página de un documento de procesamiento de texto. Contiene un método de ejemplo RemoveHeadersAndFooters
para ilustrar esta tarea.
Método RemoveHeadersAndFooters
Puede usar el método para quitar toda la RemoveHeadersAndFooters
información de encabezado y pie de página de un documento de procesamiento de texto. Tenga en cuenta que no solo debe eliminar los elementos del encabezado y el pie de página del almacenamiento de documentos, también debe eliminar las referencias a dichos elementos del documento. El código de ejemplo demuestra ambos pasos en la operación. El RemoveHeadersAndFooters
método acepta un único parámetro, una cadena que indica la ruta de acceso del archivo que desea modificar.
static void RemoveHeadersAndFooters(string filename)
Encontrará el listado completo de códigos para el método en la sección Código de ejemplo.
Llamar al método de ejemplo
Para llamar al método de ejemplo, pase una cadena para el primera parámetro que contenga el nombre de archivo del documento que desea modificar tal como se muestra en el siguiente ejemplo de código.
string filename = args[0];
RemoveHeadersAndFooters(filename);
Funcionamiento del código
El RemoveHeadersAndFooters
método funciona con el documento que especifique, eliminando todos los elementos de encabezado y pie de página y las referencias a esos elementos. El código comienza abriendo el documento, usando el Open método e indicando que el documento debe abrirse para el acceso de lectura y escritura (el parámetro true final). Dado el documento abierto, el código usa la MainDocumentPart propiedad para navegar al documento principal y almacenar la referencia en una variable denominada 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 la existencia de encabezado/pie de página
Dada una referencia a la parte del documento, el código siguiente determina si tiene algún trabajo que hacer, es decir, si el documento contiene encabezados o pies de página. Para decidir, el código llama al Count
método de las HeaderParts propiedades y FooterParts del elemento de documento y, si devuelve un valor mayor que 0, el código continúa.
Tenga en cuenta que las HeaderParts
propiedades y FooterParts
devuelven un IEnumerable<T> objeto de HeaderPart o FooterPart , respectivamente.
// Count the header and footer parts and continue if there
// are any.
if (docPart.HeaderParts.Count() > 0 || docPart.FooterParts.Count() > 0)
{
Quitar los elementos de encabezado y pie de página
Dada una colección de referencias a los elementos de encabezado y pie de página, puede escribir código para eliminar cada una de ellas individualmente, pero eso no es necesario debido al SDK de Open XML. En su lugar, puede llamar al DeleteParts método , pasando la colección de elementos que se van a eliminar─ este método simple proporciona un acceso directo para eliminar una colección de elementos. Por lo tanto, las siguientes líneas de código toman el lugar del bucle que debería escribir manualmente.
// Remove the header and footer parts.
docPart.DeleteParts(docPart.HeaderParts);
docPart.DeleteParts(docPart.FooterParts);
Eliminar las referencias a encabezado y pie de página
Llegados a este punto, el código ha eliminado los elementos de encabezado y pie de página, pero el documento sigue conteniendo referencias a dichos elementos. Antes de que se quiten las referencias huérfanas, el código debe recuperar una referencia al contenido del documento (es decir, al contenido XML incluido en el elemento del documento principal).
Para quitar las referencias varadas, el código recupera primero una colección de elementos HeaderReference, convierte la colección en un List
y, a continuación, recorre en bucle la colección, llamando al Remove() método para cada elemento encontrado. Tenga en cuenta que el código convierte el IEnumerable
devuelto por el Descendants() método en un List
para que pueda eliminar elementos de la lista y que el HeaderReference tipo proporcionado por el SDK de Open XML facilita la referencia a elementos de tipo HeaderReference
en el contenido XML. (Sin esa ayuda adicional, tendría que trabajar con los detalles del contenido XML directamente.) Una vez ha quitado todos los encabezados, el código repite la operación con los elementos de pie de página.
// 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 ejemplo
A continuación se muestra el ejemplo de código completo RemoveHeadersAndFooters
en C# y 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();
}
}
}
}