Compartir a través de


Abrir y agregar texto en un documento de procesamiento de texto

En este tema se muestra cómo usar las clases del SDK de Open XML para Office para abrir y agregar texto a un documento de procesamiento de Word mediante programación.


Procedimiento para abrir un documento y agregarle texto

El SDK de Open XML le ayuda a crear Word procesamiento de contenido y estructura de documentos mediante clases fuertemente tipadas que corresponden a WordprocessingML elementos. En este tema se muestra cómo usar las clases del SDK de Open XML para abrir un documento de procesamiento de Word y agregarle texto. Además, en este tema se presenta la estructura básica de un WordprocessingML documento, los elementos XML asociados y sus correspondientes clases de SDK de Open XML.


Creación de un objeto WordprocessingDocument

En el SDK de Open XML, la WordprocessingDocument clase representa un paquete de documento Word. Para abrir y trabajar con un documento Word, cree una instancia de la WordprocessingDocument clase a partir del documento. Después de crear la instancia desde el documento, puede obtener acceso a la parte de documento principal que contiene el texto del documento. El texto de la parte del documento principal se representa en el paquete como XML mediante WordprocessingML marcado.

Para crear la instancia de clase desde el documento, llame a uno de los Open métodos. Se proporcionan varios métodos, cada uno con una firma distinta. El código de ejemplo de este tema usa el Open(String, Boolean) método con una firma que requiere dos parámetros. El primer parámetro toma una cadena de ruta de acceso completa que representa el documento que se debe abrir. El segundo parámetro es true o false y representa si desea que el archivo se abra para su edición. Los cambios realizados en el documento no se guardarán si este parámetro es false.

En el ejemplo de código siguiente se llama al Open método .

// Open a WordprocessingDocument for editing using the filepath.
using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
{

    if (wordprocessingDocument is null)
    {
        throw new ArgumentNullException(nameof(wordprocessingDocument));
    }

Cuando haya abierto el paquete de documentos de Word, puede agregar texto al elemento de documento principal. Para acceder al cuerpo de la parte principal del documento, cree los elementos que falten y asigne una referencia al cuerpo del documento, como se muestra en el ejemplo de código siguiente.

// Assign a reference to the existing document body.
MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
mainDocumentPart.Document ??= new Document();
mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;

Estructura de un documento WordProcessingML

La estructura básica de un WordProcessingML documento consta de los document elementos y body , seguidos de uno o varios elementos de nivel de bloque, como p, que representa un párrafo. Un párrafo contiene uno o varios r elementos. significa r ejecutar, que es una región de texto con un conjunto común de propiedades, como el formato. Una ejecución contiene uno o varios t elementos. El t elemento contiene un intervalo de texto. En el ejemplo de código siguiente se muestra el WordprocessingML marcado de un documento que contiene el texto "Texto de ejemplo".

    <w:document xmlns:w="http://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 WordprocessingML elementos. Encontrará estas clases en el espacio de DocumentFormat.OpenXml.Wordprocessing nombres. En la tabla siguiente se enumeran los nombres de clase de las clases correspondientes a los documentelementos , body, p, ry t .

Elemento de WordprocessingML Open XML SDK (clase) Descripción
<document/> 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.


Generación del marcado WordprocessingML para agregar el texto

Cuando tenga acceso al cuerpo del elemento de documento principal, agregue texto agregando instancias de las Paragraphclases , Runy Text . Esto genera el marcado WordprocessingML requerido. En el siguiente ejemplo de código se agrega el párrafo .

// Add new text.
Paragraph para = body.AppendChild(new Paragraph());
Run run = para.AppendChild(new Run());
run.AppendChild(new Text(txt));

Código de ejemplo

El método de ejemplo OpenAndAddTextToWordDocument que se muestra aquí se puede usar para abrir un documento Word y anexar texto mediante el SDK de Open XML. Para llamar este método, pase un nombre de archivo de ruta de acceso completa como primer parámetro, y el texto que se debe agregar, como segundo parámetro.

string file = args[0];
string txt = args[1];

OpenAndAddTextToWordDocument(args[0], args[1]);

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

Observe que el OpenAndAddTextToWordDocument método no incluye una llamada explícita a Save. Esto se debe a que la característica Autoguardar está activada de forma predeterminada y no se ha deshabilitado en la llamada al Open método mediante el uso de OpenSettings.

using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;

static void OpenAndAddTextToWordDocument(string filepath, string txt)
{
    // Open a WordprocessingDocument for editing using the filepath.
    using (WordprocessingDocument wordprocessingDocument = WordprocessingDocument.Open(filepath, true))
    {

        if (wordprocessingDocument is null)
        {
            throw new ArgumentNullException(nameof(wordprocessingDocument));
        }

        // Assign a reference to the existing document body.
        MainDocumentPart mainDocumentPart = wordprocessingDocument.MainDocumentPart ?? wordprocessingDocument.AddMainDocumentPart();
        mainDocumentPart.Document ??= new Document();
        mainDocumentPart.Document.Body ??= mainDocumentPart.Document.AppendChild(new Body());
        Body body = wordprocessingDocument.MainDocumentPart!.Document!.Body!;

        // Add new text.
        Paragraph para = body.AppendChild(new Paragraph());
        Run run = para.AppendChild(new Run());
        run.AppendChild(new Text(txt));
    }
}

Vea también