Saltar al contenido

Genere un documento de Word (docx) usando datos de un archivo XML / Convierta XML a un documento de Word basado en una plantilla

Nuestro team de redactores ha estado mucho tiempo investigando para darle resolución a tus preguntas, te compartimos la respuesta y nuestro objetivo es serte de mucha apoyo.

Solución:

Descubrí cómo usar controles de contenido para generar documentos y cómo completar datos de un XML en controles de contenido. He dividido esto en 2 partes:

  • Parte 1: Cree su documento de plantilla para la generación de documentos
  • Parte 2: use código en C# para generar documentos basados ​​en una plantilla

Parte 1: Cree su documento de plantilla para la generación de documentos

  1. Cree un XML de muestra a partir del cual pueda crear la plantilla de Word para la generación de documentos. Preferiblemente comience con una versión menos complicada para acostumbrarse.

Usé el siguiente XML para las pruebas. Para las pruebas no tenía secciones repetitivas, imágenes, etc.



    This is the value in field1 from the XML file
    This is the value in field2 from the XML file
    This is the value in field3 from the XML file

Nota 1: Esto será solo un XML de muestra para crear su plantilla de Word. Los archivos XML con datos reales en este mismo formato se pueden aplicar posteriormente al generar documentos de Word a partir de la plantilla.

Nota 2: Él xmlns attribute puede contener literalmente cualquier cosa que desee y no tiene que ser una URL que comience con http.

Guarde su archivo XML de muestra en cualquier ubicación para que pueda importarse a la plantilla que está a punto de crear.

  1. Asegúrate que Developer la pestaña está habilitada en su copia de Word [File -> Options -> Customize Ribbon -> Under Customize the Ribbon, make sure Developer is selected -> OK]. Detalles: Cómo: Mostrar la pestaña Desarrollador en la cinta

  2. Cree un nuevo documento de Word (o use un documento de Word existente) que será su plantilla para la generación de documentos.

  3. Sobre el Developer pestaña, haga clic en XML Mapping Pane. Esto abrirá el XML Mapping Pane en el lado derecho del documento.

  4. En el Panel de mapeo XML, seleccione el Custom XML Part desplegable -> Seleccionar (Add new part).

  5. Seleccione el archivo XML que guardó en el paso 1 -> Open.

  6. En el Panel de mapeo XML, seleccione el Custom XML Part menú desplegable -> Seleccione el elemento con el texto que estaba en el xmlns attribute del archivo XML personalizado. Si usa el archivo de muestra anterior, sería http://CustomDemoXML.htm.

  7. Añadir un poco static texto a un documento de Word y agregar un Plain Text Content Control al lado (en el Developer pestaña -> Controls sección. Repita para todos los campos que necesite agregar.

Para el XML de muestra anterior, tenía el siguiente documento de Word:

ejemplo de plantilla de documento de word

  1. Haga clic en el primero Plain Text Content Control -> En el Panel de asignación XML, haga clic con el botón derecho en el campo que desea asignar a ese control de contenido -> Haga clic en Map to Selected Content Control. Repita para todos los campos que desea mapear.

Nota: Alternativamente, en lugar de agregar el Plain Text Content Control elementos de la pestaña del desarrollador en el paso 8, puede hacer clic con el botón derecho en el campo que desea asignar en el Panel de asignación XML -> Hacer clic Insert Content Control -> Haga clic en Plain Text.

Del mismo modo, también puede agregar otros tipos de controles, como casillas de verificación, selectores de fecha e incluso secciones repetidas (¡también admite secciones repetidas anidadas! – desde Word 2013) y mapear datos de XML a aquellos que usan solo la funcionalidad nativa de Word y sin terceros. ¡instrumentos!

  1. Guarde su documento de plantilla.

Parte 2: use código en C# para generar documentos basados ​​en una plantilla

Esto utiliza OpenXML SDK recomendado por Microsoft para generar documentos utilizando un archivo XML que contiene datos reales.

  1. Cree su archivo XML/abra un archivo XML existente con el que generar un documento a partir de la plantilla creada anteriormente. Debe estar en el mismo formato que el archivo XML de muestra utilizado para crear la plantilla.

  2. Utilice el SDK de OpenXML para eliminar cualquier CustomXMLPart elementos del documento. Esto supone que no se utilizan otras partes XML personalizadas en el documento, como es el caso en este ejemplo. Para escenarios complejos, puede eliminar partes XML específicas si es necesario.

  3. Use el SDK de OpenXML para agregar un nuevo CustomXMLPart basado en el archivo XML en el paso #1 anterior.

Aquí está el código de muestra que tengo para “actualizar”/”recargar” los datos de muestra en la plantilla con datos de un archivo XML que contiene datos reales (suponiendo que el archivo XML utilizado para generar el documento ya está creado y guardado):

using System.IO;
using DocumentFormat.OpenXml.Packaging;

namespace SampleNamespace

    public static class SampleClass
    
        public static void GenerateDocument()
        
            string rootPath = @"C:Temp";
            string xmlDataFile = rootPath + @"MyNewData.xml";
            string templateDocument = rootPath + @"MyTemplate.docx";
            string outputDocument = rootPath + @"MyGeneratedDocument.docx";

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(templateDocument, true))
            
                //get the main part of the document which contains CustomXMLParts
                MainDocumentPart mainPart = wordDoc.MainDocumentPart;

                //delete all CustomXMLParts in the document. If needed only specific CustomXMLParts can be deleted using the CustomXmlParts IEnumerable
                mainPart.DeleteParts(mainPart.CustomXmlParts);

                //add new CustomXMLPart with data from new XML file
                CustomXmlPart myXmlPart = mainPart.AddCustomXmlPart(CustomXmlPartType.CustomXml);
                using (FileStream stream = new FileStream(xmlDataFile, FileMode.Open))
                
                    myXmlPart.FeedData(stream);
                
            

        
    

¡Eso es todo!

Ok, encontré una guía detallada sobre el uso de XSLT como plantilla para generar el documento de Word aquí: Uso de XSLT y Open XML para crear un documento de Word 2007.

Parece que aunque este artículo es para Word 2007, funciona perfectamente en Word 2016.

El único problema con este método es que si se necesitan cambios en la plantilla más adelante, se necesita mucho esfuerzo para actualizar el archivo xslt y no es fácil de usar, ya que no se puede actualizar en Word y en el XML real del documento. necesita ser manipulado.

En el lado positivo, la generación de documentos es MUY flexible con todo el poder disponible a través de XSL (foreach, variables, condiciones, etc.)

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *