Convertir DataTable en CSV en C#

Muhammad Zeeshan 15 février 2024
Convertir DataTable en CSV en C#

Cet article vous guidera dans la conversion d’un DataTable en un fichier CSV à l’aide de C#. Pour commencer, nous devons savoir ce qu’est CSV, alors allons-y.

Les données d’un fichier Comma Split Values, également connu sous le nom de fichier CSV, sont séparées dans leurs colonnes respectives par des virgules plutôt que par des espaces. Une autre utilisation d’un fichier CSV consiste à ouvrir le fichier dans Excel immédiatement lorsque les données sont automatiquement placées dans les cellules appropriées dans Excel.

Convertir DataTable en CSV en C#

La première étape de la conversion d’un DataTable en fichier CSV consiste à créer un DataTable. Les étapes à suivre pour le faire sont décrites dans les paragraphes suivants.

Créer et remplir le DataTable

  • Pour commencer, nous devons importer les bibliothèques suivantes :

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
  • Nous avons créé une classe nommée datacreation avec une méthode appelée CreateData() qui génère un DataTable comme valeur de retour.

    public static class datacreation {
      public static DataTable CreateData() {}
    }
    
  • Pour commencer la saisie des données, nous devons créer un objet DataTable nommé dt dans CreateData().

    DataTable dt = new DataTable();
    
  • Une fois l’objet initialisé, l’étape suivante consiste à ajouter des colonnes de données au DataTable dt. Nous avons inclus les champs Rollnum, Firstname, Lastname et Subject, et vous êtes libre d’ajouter tout autre domaine dont vous avez besoin.

    dt.Columns.Add("RollNum", typeof(int));
    dt.Columns.Add("Firstname", typeof(string));
    dt.Columns.Add("Lastname", typeof(string));
    dt.Columns.Add("Subjects", typeof(string));
    
  • Ensuite, remplissez les informations dans ces colonnes ou champs.

    dt.Rows.Add(3227, "Zeeshan", "Khan", "C#");
    dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java");
    dt.Rows.Add(3247, "Osama", "shanii", "C++");
    dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python");
    dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db");
    dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl");
    dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP");
    dt.Rows.Add(3299, "Ahsan", "Chishti", "C");
    
  • La fonction CreateData() retournera une table de type DataTable.

    return dt;
    

Convertir le DataTable en CSV en C#

Après avoir créé le DataTable, l’étape suivante consiste à écrire le code qui convertira le DataTable en CSV.

  • Nous avons ajouté une nouvelle méthode appelée ConvertTocsv à la classe implementCSV. Les variables dt et path sont les paramètres qu’il prend.

    public static class implementCSV {
      public static void ConvertTocsv(this DataTable dt, string path) {}
    }
    
  • Dans la méthode ConvertTocsv, nous avons créé un objet StreamWriter appelé s, qui écrira les données dans le chemin spécifié.

    StreamWriter s = new StreamWriter(path, false);
    
  • Nous allons utiliser une boucle for pour séparer les données du DataTable en insérant des virgules entre chaque colonne.

    for (int i = 0; i < dt.Columns.Count; i++) {
      s.Write(dt.Columns[i]);
      if (i < dt.Columns.Count - 1) {
        s.Write(",");
      }
    }
    s.Write(s.NewLine);
    
  • Suite à cela, nous allons maintenant utiliser une boucle foreach, qui écrira les données du DataTable dt avec une virgule.

    foreach (DataRow dr in dt.Rows) {
      for (int i = 0; i < dt.Columns.Count; i++) {
        if (!Convert.IsDBNull(dr[i])) {
          string value = dr[i].ToString();
          if (value.Contains(',')) {
            value = String.Format("\"{0}\"", value);
            s.Write(value);
          } else {
            s.Write(dr[i].ToString());
          }
        }
        if (i < dt.Columns.Count - 1) {
          s.Write(",");
        }
      }
      s.Write(s.NewLine);
    }
    

Code source complet

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataTableExport {
  public static class datacreation {
    public static DataTable CreateData() {
      DataTable dt = new DataTable();
      dt.Columns.Add("RollNum", typeof(int));
      dt.Columns.Add("Firstname", typeof(string));
      dt.Columns.Add("Lastname", typeof(string));
      dt.Columns.Add("Subjects", typeof(string));

      dt.Rows.Add(3227, "Zeeshan", "Khan", "C#");
      dt.Rows.Add(3290, "Bubby", "Zeeshan", "Java");
      dt.Rows.Add(3247, "Osama", "shanii", "C++");
      dt.Rows.Add(3156, "Haseeb", "Bhatti", "Python");
      dt.Rows.Add(3223, "Saad", "Shukhri", "Mongo Db");
      dt.Rows.Add(3267, "Sheraz", "Malik", "MySQl");
      dt.Rows.Add(3288, "Nabeel", "Sindho", "PHP");
      dt.Rows.Add(3299, "Ahsan", "Chishti", "C");
      return dt;
    }
  }
  public static class implementCSV {
    public static void ConvertTocsv(this DataTable dt, string path) {
      StreamWriter s = new StreamWriter(path, false);
      for (int i = 0; i < dt.Columns.Count; i++) {
        s.Write(dt.Columns[i]);
        if (i < dt.Columns.Count - 1) {
          s.Write(",");
        }
      }
      s.Write(s.NewLine);
      foreach (DataRow dr in dt.Rows) {
        for (int i = 0; i < dt.Columns.Count; i++) {
          if (!Convert.IsDBNull(dr[i])) {
            string value = dr[i].ToString();
            if (value.Contains(',')) {
              value = String.Format("\"{0}\"", value);
              s.Write(value);
            } else {
              s.Write(dr[i].ToString());
            }
          }
          if (i < dt.Columns.Count - 1) {
            s.Write(",");
          }
        }
        s.Write(s.NewLine);
      }
      s.Close();
    }
  }
}

Créer un formulaire Windows

Après avoir créé les données dans le DataTable et les avoir séparées à l’aide de virgules, l’étape suivante consiste à créer un formulaire Windows dans lequel les données peuvent être affichées puis converties au format .csv.

  • Pour commencer, créons un formulaire Windows, comme indiqué ci-dessous, et à l’intérieur, nous mettrons un DataGridView et un bouton appelé Convert data to CSV. Un DataGridView qui affiche les données créées et un bouton qui convertit le DataTable en CSV sont inclus.

    Formulaire de tableau de données

  • Lorsque vous aurez fini d’exécuter le Windows Form, il ressemblera à ceci :

    Formulaire de course

Écrire le code du formulaire Windows

Après avoir créé le formulaire Windows, l’étape suivante consiste à écrire le code du bouton Convert data to CSV.

  • Initialisez un objet et remplissez-le avec des données en appelant les méthodes listées ci-dessous.

    DataTable dt = datacreation.CreateData();
    
  • OpenSavefileDialog() peut être utilisé pour enregistrer le fichier avec le nom donné.

    string filename = OpenSavefileDialog();
    
  • ConvertTocsv sera utilisé pour créer un fichier CSV à partir des données que nous avons créées.

    dt.ConvertTocsv(filename);
    

Code source du formulaire Windows

public Form1() {
  InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e) {
  DataTable dt = datacreation.CreateData();
  dataGridView1.DataSource = dt;
}

private void btnCSV_Click(object sender, EventArgs e) {
  DataTable dt = datacreation.CreateData();
  string filename = OpenSavefileDialog();
  dt.ConvertTocsv(filename);
}

private string OpenSavefileDialog() {
  string filename = null;
  SaveFileDialog saveFileDialog = new SaveFileDialog();
  saveFileDialog.Filter = "csv File|*.csv";
  saveFileDialog.Title = "Save";
  DialogResult dialogResult = saveFileDialog.ShowDialog();
  if (dialogResult == DialogResult.OK) {
    filename = saveFileDialog.FileName;
  }
  return filename;
}
Muhammad Zeeshan avatar Muhammad Zeeshan avatar

I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.

LinkedIn

Article connexe - Csharp CSV

Article connexe - Csharp DataTable