Insérer DataTable dans un document Word en C#

En tant que développeur .NET, vous devez très souvent gérer des objets DataTable. Surtout lorsque vous avez besoin d’importer ou d’exporter des données à partir de bases de données ou de fichiers XML/JSON. Lors de la génération de documents par programmation, vous devrez peut-être insérer des données à partir des objets DataTable directement dans le tableau des documents Word. Pour de tels cas, permettez-moi de vous donner la solution parfaite et la plus simple pour insérer des données de DataTable dans un document Word en C#.

Bibliothèque C# pour insérer DataTable dans Word DOC - Téléchargement gratuit

Pour importer des données d’objets DataTable dans des documents Word, nous utiliserons Aspose.Words for .NET. Il s’agit d’une bibliothèque riche en fonctionnalités qui vous permet de créer et de traiter des documents MS Word. Vous pouvez soit télécharger sa DLL, soit l’installer à partir de NuGet.

Télécharger DLL

Installer via NuGet

PM> Install-Package Aspose.Words

C# Insérer DataTable dans un document Word - Étapes

Voici les étapes que nous suivrons pour récupérer les données d’un DataTable et les insérer dans le document Word.

  • Chargez les données d’une base de données ou d’un fichier de données dans l’objet DataTable.
  • Créez un nouveau document Word et ajoutez-y un nouveau tableau.
  • Parcourez les lignes du DataTable et insérez chaque ligne dans le tableau de Word.

Et c’est tout.

Voyons maintenant comment transformer ces étapes en code C# et importer un DataTable dans un document Word.

Insérer des données de DataTable dans Word DOC en C#

Tout d’abord, nous allons écrire une méthode qui accepte le DocumentBuilder pour construire le document, DataTable ayant des données, et un paramètre supplémentaire pour activer/désactiver l’importation des en-têtes de colonne. De plus, il renvoie l’objet Table.

Voici le flux de travail de cette méthode.

  • Créez une nouvelle table et récupérez sa référence dans un objet Table.
  • Insérez des colonnes dans le tableau en fonction des colonnes dans DataTable.
  • Définissez l’épaisseur de la police si la première ligne est destinée aux en-têtes.
  • Parcourez chaque DataRow dans la collection DataTable.Rows.
  • Insérez une nouvelle cellule pour chaque valeur et définissez le type de données en conséquence.
  • Renvoie l’objet Table.

Voici l’implémentation de la méthode d’importation de données d’un DataTable dans une table dans un document Word en C#.

///<summary>
/// Importe le contenu du DataTable spécifié dans un nouvel objet Aspose.Words Table. 
/// Le tableau est inséré à la position actuelle du générateur de document et en utilisant le formatage du générateur actuel, le cas échéant.
///</summary>
public static Table ImportTableFromDataTable(DocumentBuilder builder, DataTable dataTable, bool importColumnHeadings)
{
    Table table = builder.StartTable();

    // Vérifiez si les noms des colonnes de la source de données doivent être inclus dans une ligne d'en-tête.
    if (importColumnHeadings)
    {
        // Enregistrez les valeurs d'origine de ces propriétés avant de les modifier.
        bool boldValue = builder.Font.Bold;
        ParagraphAlignment paragraphAlignmentValue = builder.ParagraphFormat.Alignment;

        // Mettez en forme la ligne d'en-tête avec les propriétés appropriées.
        builder.Font.Bold = true;
        builder.ParagraphFormat.Alignment = ParagraphAlignment.Center;

        // Créez une nouvelle ligne et insérez le nom de chaque colonne dans la première ligne du tableau.
        foreach (DataColumn column in dataTable.Columns)
        {
            builder.InsertCell();
            builder.Writeln(column.ColumnName);
        }

        builder.EndRow();

        // Restaurer le formatage d'origine.
        builder.Font.Bold = boldValue;
        builder.ParagraphFormat.Alignment = paragraphAlignmentValue;
    }

    foreach (DataRow dataRow in dataTable.Rows)
    {
        foreach (object item in dataRow.ItemArray)
        {
            // Insérez une nouvelle cellule pour chaque objet.
            builder.InsertCell();

            switch (item.GetType().Name)
            {
                case "DateTime":
                    // Définissez un format personnalisé pour les dates et les heures.
                    DateTime dateTime = (DateTime)item;
                    builder.Write(dateTime.ToString("MMMM d, yyyy"));
                    break;
                default:
                    // Par défaut, tout autre élément sera inséré sous forme de texte.
                    builder.Write(item.ToString());
                    break;
            }

        }

        // Après avoir inséré toutes les données de l'enregistrement en cours, nous pouvons terminer la ligne du tableau.
        builder.EndRow();
    }

    // Nous avons fini d'insérer toutes les données du DataTable, nous pouvons terminer le tableau.
    builder.EndTable();

    return table;
}

Il est maintenant temps d’appeler cette méthode et d’insérer un DataTable dans un document Word.

Importer DataTable dans un document Word en C

Voici les étapes pour importer des données de DataTable dans un document Word en C#.

  • Créez un nouveau document Word (ou chargez-en un existant) à l’aide de la classe Document.
  • Lit les données de la base de données/du fichier dans l’objet DataTable.
  • Appelez la méthode que nous avons écrite dans la section précédente et récupérez la table renvoyée.
  • Définissez la mise en forme du tableau.
  • Enregistrez le fichier Word à l’aide de la méthode Document.Save().

L’exemple de code suivant montre comment insérer un DataTable dans un document Word en C#.

// Créez un nouveau document.
Document doc = new Document();

// Nous pouvons positionner où nous voulons que le tableau soit inséré et également spécifier toute mise en forme supplémentaire à
// également appliqué sur la table.
DocumentBuilder builder = new DocumentBuilder(doc);

// Nous voulons faire pivoter le paysage de la page car nous attendons un tableau large.
doc.FirstSection.PageSetup.Orientation = Orientation.Landscape;

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

// Récupérez les données de notre source de données qui est stockée sous forme de DataTable.
DataTable dataTable = ds.Tables[0];

// Créez une table dans le document à partir des données contenues dans le DataTable.
Table table = ImportTableFromDataTable(builder, dataTable, true);

// Nous pouvons appliquer un style de tableau comme un moyen très rapide d'appliquer une mise en forme à l'ensemble du tableau.
table.StyleIdentifier = StyleIdentifier.MediumList2Accent1;
table.StyleOptions = TableStyleOptions.FirstRow | TableStyleOptions.RowBands | TableStyleOptions.LastColumn;

// Pour notre tableau, nous souhaitons supprimer l'en-tête de la colonne d'image.
table.FirstRow.LastCell.RemoveAllChildren();

// Enregistrez le document de sortie.
doc.Save("Table.docx");

C# DataTable to Word Importer Library - Obtenez une licence gratuite

Vous pouvez obtenir une licence temporaire gratuite pour utiliser Aspose.Words for .NET sans limitation d’évaluation.

Conclusion

Dans cet article, vous avez appris à insérer des données d’un DataTable dans un document Word en C#. Vous pouvez facilement intégrer l’exemple de code dans vos applications et importer des données directement à partir de la base de données/XML/JSON dans des documents Word à l’aide de DataTable.

Bibliothèque de mots .NET - En savoir plus

Vous pouvez visiter la documentation de Aspose.Words for .NET pour en savoir plus sur la bibliothèque. Si vous avez des questions, n’hésitez pas à nous en faire part via notre forum.

Voir également