Share via


Eliminar un elemento de documento de un paquete

En este tema se muestra cómo usar las clases del SDK de Open XML para Office para quitar un elemento de documento (archivo) de un documento Wordprocessing mediante programación.


Partes de documento y paquetes

Un documento Office Open XML se almacena como un paquete, cuyo formato se define mediante ISO/IEC 29500-2. El paquete puede incluir varias partes con relaciones entre ellas. La relación entre las partes controla la categoría del documento. Un documento puede definirse como un documento de procesamiento de texto si su elemento de relación de paquete contiene una relación con una parte de documento principal. Si su elemento de relación de paquete contiene una relación con una parte de presentación, puede definirse como un documento de presentación. Si su elemento de relación de paquete contiene una relación con una parte de libro, se define como un documento de hoja de cálculo. En este tema sobre procedimientos se usará un paquete de documentos de procesamiento de texto.


Obtención de un objeto WordprocessingDocument

El ejemplo de código comienza con la apertura de un archivo de paquete pasando un nombre de archivo como argumento a uno de los métodos Open() sobrecargados de DocumentFormat.OpenXml.Packaging.WordprocessingDocument que toma una cadena y un valor booleano que especifica si el archivo debe abrirse en modo de lectura y escritura o no. En este caso, el valor booleano es true, lo que indica que el archivo debe abrirse en modo de lectura y escritura.

    // Open a Wordprocessing document for editing.
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
          // Insert other code here.
    }

La instrucción using proporciona una alternativa recomendada a la típica secuencia .Create, .Save, .Close. Garantiza que se llamará automáticamente al método Dispose (un método interno que Open XML SDK usa para limpiar recursos) cuando se llegue a la llave de cierre. El bloque que sigue a la instrucción using establece un ámbito para el objeto que se crea o se nombra en la instrucción using, en este caso wordDoc. Dado que la clase WordprocessingDocument en Open XML SDK guarda y cierra el objeto automáticamente como parte de su implementación System.IDisposable y que se llama automáticamente a Dispose cuando sale del bloque, no necesita llamar explícitamente a Save y Close, siempre que use using.


Estructura de un documento WordProcessingML

La estructura de documento básica de un documento WordProcessingML contiene los elementos document y body, seguidos de uno o varios elementos a nivel de bloque, como p, que representa un párrafo. Un párrafo contiene uno o varios elementos r. La r representa a run (segmento), que es una región de texto con un conjunto de propiedades comunes, como el formato. Un segmento contiene uno o varios elementos t. El elemento t contiene un intervalo de texto. En el siguiente ejemplo de código se muestra el marcado WordprocessingML de un documento que contiene el texto "Example text".

    <w:document xmlns:w="https://schemas.openxmlformats.org/wordprocessingml/2006/main">
      <w:body>
        <w:p>
          <w:r>
            <w:t>Example text.</w:t>
          </w:r>
        </w:p>
      </w:body>
    </w:document>

Con el SDK de Open XML, puede crear contenido y estructura de documentos mediante clases fuertemente tipadas que corresponden a elementos WordprocessingML . Puede encontrar estas clases en el espacio de nombres DocumentFormat.OpenXml.Wordprocessing . La tabla siguiente muestra los nombres de las clases que corresponden a los elementos document, body, p, r y t.

Elemento de WordprocessingML Open XML SDK (clase) Descripción
documento Document El elemento raíz del elemento de documento principal.
body Body El contenedor de las estructuras a nivel de bloque, como párrafos, tablas, anotaciones y otras recogidas en la especificación ISO/IEC 29500.
p Paragraph Un párrafo.
r Run Un segmento.
t Text Un intervalo de texto.

Para obtener más información sobre la estructura general de los elementos y elementos de un documento WordprocessingML, vea Estructura de un documento WordprocessingML.


Elemento settings

El siguiente texto de la especificación ISO/IEC 29500 presenta el elemento settings en un paquete de PresentationML.

Este elemento especifica la configuración que se aplica a un documento WordprocessingML. Este elemento es el elemento raíz de la parte Configuración del documento en un documento WordprocessingML.
Ejemplo: considere el siguiente fragmento wordprocessingML para la parte de configuración de un documento:

    <w:settings>
      <w:defaultTabStop w:val="720" />
      <w:characterSpacingControl w:val="dontCompress" />
    </w:settings>

El elemento settings contiene todas las opciones de configuración de este documento. En este caso, las dos opciones aplicadas son incrementos de tabulaciones automáticas de 0,5 pulgadas mediante el elemento defaultTabStop y compresión de espacio en blanco de nivel sin caracteres mediante el elemento characterSpacingControl.

© ISO/IEC29500: 2008.


Funcionamiento del código de ejemplo

Después de abrir el documento, en la instrucción using, como un objeto WordprocessingDocument, se crea una referencia a la parte DocumentSettingsPart. A continuación, se puede comprobar si la parte existe; si es así, elimínela del paquete. En este caso, la parte settings.xml se quita del paquete.

    MainDocumentPart mainPart = wordDoc.MainDocumentPart;
    if (mainPart.DocumentSettingsPart != null)
    {
        mainPart.DeletePart(mainPart.DocumentSettingsPart);
    }

Código de ejemplo

En el siguiente código se quita una parte de documento de un paquete. Para ejecutar el programa, llame al método RemovePart como en este ejemplo.

    string document = @"C:\Users\Public\Documents\MyPkg6.docx";
    RemovePart(document);

Nota:

Antes de ejecutar el programa en el archivo de prueba, "MyPkg6.docs", por ejemplo, abra el archivo mediante la herramienta de productividad del SDK de Open XML para Microsoft Office y examine su estructura. Tras ejecutar el programa, examine el archivo de nuevo y observará que se quitó la parte DocumentSettingsPart.

A continuación se muestra el ejemplo de código completo en C# y Visual Basic.

using DocumentFormat.OpenXml.Packaging;

RemovePart(args[0]);

// To remove a document part from a package.
static void RemovePart(string document)
{
    using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(document, true))
    {
        MainDocumentPart? mainPart = wordDoc.MainDocumentPart;

        if (mainPart is not null && mainPart.DocumentSettingsPart is not null)
        {
            mainPart.DeletePart(mainPart.DocumentSettingsPart);
        }
    }
}

Vea también