Inserte DataTable en un documento de Word en C#

Como desarrollador de .NET, tiene que lidiar con objetos DataTable con mucha frecuencia. Especialmente, cuando necesita importar o exportar datos de bases de datos o archivos XML/JSON. Al generar documentos mediante programación, es posible que deba insertar datos de los objetos DataTable directamente en la tabla en los documentos de Word. Para tales casos, déjame darte la solución perfecta y más fácil para insertar datos de DataTable en un documento de Word en C#.

Biblioteca C# para insertar DataTable en Word DOC - Descarga gratuita

Para importar datos de objetos DataTable a documentos de Word, usaremos Aspose.Words for .NET. Es una biblioteca rica en funciones que le permite crear y procesar documentos de MS Word. Puede descargar su DLL o instalarlo desde NuGet.

Descargar DLL

Instalar a través de NuGet

PM> Install-Package Aspose.Words

C# Insertar tabla de datos en un documento de Word - Pasos

Los siguientes son los pasos que seguiremos para recuperar datos de un DataTable e insertarlos en el documento de Word.

  • Cargue datos de una base de datos o un archivo de datos en el objeto DataTable.
  • Cree un nuevo documento de Word y agréguele una nueva tabla.
  • Recorra las filas en DataTable e inserte cada fila en la tabla de Word.

Y eso es.

Veamos ahora cómo transformar estos pasos en el código C# e importar un DataTable en un documento de Word.

Insertar datos de DataTable en Word DOC en C#

Primero, escribiremos un método que acepte DocumentBuilder para construir el documento, DataTable con datos y un parámetro adicional para habilitar/deshabilitar la importación de encabezados de columna. Además, devuelve el objeto Tabla.

El siguiente es el flujo de trabajo de este método.

  • Cree una nueva tabla y obtenga su referencia en un objeto Table.
  • Inserte columnas en la tabla de acuerdo con las columnas en DataTable.
  • Establezca el peso de la fuente si la primera fila es para encabezados.
  • Recorra cada DataRow en la colección DataTable.Rows.
  • Inserte una nueva celda para cada valor y establezca el tipo de datos en consecuencia.
  • Devuelve el objeto Tabla.

La siguiente es la implementación del método para importar datos de un DataTable a una tabla en un documento de Word en C#.

///<summary>
/// Importa el contenido del DataTable especificado en un nuevo objeto Aspose.Words Table. 
/// La tabla se inserta en la posición actual del generador de documentos y utiliza el formato del generador actual, si hay alguno definido.
///</summary>
public static Table ImportTableFromDataTable(DocumentBuilder builder, DataTable dataTable, bool importColumnHeadings)
{
    Table table = builder.StartTable();

    // Compruebe si los nombres de las columnas de la fuente de datos deben incluirse en una fila de encabezado.
    if (importColumnHeadings)
    {
        // Almacene los valores originales de estas propiedades antes de cambiarlos.
        bool boldValue = builder.Font.Bold;
        ParagraphAlignment paragraphAlignmentValue = builder.ParagraphFormat.Alignment;

        // Dé formato a la fila de encabezado con las propiedades apropiadas.
        builder.Font.Bold = true;
        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;

        // Cree una nueva fila e inserte el nombre de cada columna en la primera fila de la tabla.
        foreach (DataColumn column in dataTable.Columns)
        {
            builder.InsertCell();
            builder.Writeln(column.ColumnName);
        }

        builder.EndRow();

        // Restaurar el formato original.
        builder.Font.Bold = boldValue;
        builder.ParagraphFormat.Alignment = paragraphAlignmentValue;
    }

    foreach (DataRow dataRow in dataTable.Rows)
    {
        foreach (object item in dataRow.ItemArray)
        {
            // Inserta una nueva celda para cada objeto.
            builder.InsertCell();

            switch (item.GetType().Name)
            {
                case "DateTime":
                    // Defina un formato personalizado para fechas y horas.
                    DateTime dateTime = (DateTime)item;
                    builder.Write(dateTime.ToString("MMMM d, yyyy"));
                    break;
                default:
                    // De forma predeterminada, cualquier otro elemento se insertará como texto.
                    builder.Write(item.ToString());
                    break;
            }

        }

        // Después de insertar todos los datos del registro actual, podemos finalizar la fila de la tabla.
        builder.EndRow();
    }

    // Hemos terminado de insertar todos los datos del DataTable, podemos terminar la tabla.
    builder.EndTable();

    return table;
}

Ahora es el momento de llamar a este método e insertar un DataTable en un documento de Word.

Importar DataTable en un documento de Word en C#

Los siguientes son los pasos para importar datos de DataTable a un documento de Word en C#.

  • Cree un nuevo documento de Word (o cargue uno existente) usando la clase Document.
  • Lea datos de la base de datos/archivo en el objeto DataTable.
  • Llame al método que hemos escrito en la sección anterior y obtenga la Tabla devuelta.
  • Establecer el formato de la tabla.
  • Guarde el archivo de Word usando el método Document.Save().

El siguiente ejemplo de código muestra cómo insertar un DataTable en un documento de Word en C#.

// Crear un nuevo documento.
Document doc = new Document();

// Podemos posicionar donde queremos que se inserte la tabla y también especificar cualquier formato adicional para ser
// aplicado sobre la mesa también.
DocumentBuilder builder = new DocumentBuilder(doc);

// Queremos rotar el paisaje de la página ya que esperamos una tabla ancha.
doc.FirstSection.PageSetup.Orientation = Orientation.Landscape;

DataSet ds = new DataSet();
ds.ReadXml("Employees.xml");

// Recupere los datos de nuestra fuente de datos que se almacena como DataTable.
DataTable dataTable = ds.Tables[0];

// Cree una tabla en el documento a partir de los datos contenidos en DataTable.
Table table = ImportTableFromDataTable(builder, dataTable, true);

// Podemos aplicar un estilo de tabla como una forma muy rápida de aplicar formato a toda la tabla.
table.StyleIdentifier = StyleIdentifier.MediumList2Accent1;
table.StyleOptions = TableStyleOptions.FirstRow | TableStyleOptions.RowBands | TableStyleOptions.LastColumn;

// Para nuestra tabla, queremos eliminar el encabezado de la columna de la imagen.
table.FirstRow.LastCell.RemoveAllChildren();

// Guarde el documento de salida.
doc.Save("Table.docx");

C# DataTable to Word Importer Library: obtenga una licencia gratuita

Puede obtener una licencia temporal gratuita para usar Aspose.Words for .NET sin limitaciones de evaluación.

Conclusión

En este artículo, ha aprendido a insertar datos de un DataTable en un documento de Word en C#. Puede integrar fácilmente el ejemplo de código en sus aplicaciones e importar datos directamente desde la base de datos/XML/JSON a documentos de Word utilizando DataTable.

Biblioteca de palabras .NET - Más información

Puede visitar la documentación de Aspose.Words for .NET para explorar más sobre la biblioteca. En caso de que tenga alguna pregunta, no dude en hacérnosla saber a través de nuestro foro.

Ver también