Konvertieren von DataTable in CSV in C#

Muhammad Zeeshan 15 Februar 2024
Konvertieren von DataTable in CSV in C#

Dieser Artikel führt Sie durch die Konvertierung einer DataTable in eine CSV-Datei mit C#. Zunächst müssen wir wissen, was CSV ist, also lassen Sie uns darauf eingehen.

Die Daten in einer Comma Split Values, auch bekannt als CSV-Datei, werden durch Kommas und nicht durch Leerzeichen in ihre jeweiligen Spalten getrennt. Eine andere Verwendung einer CSV-Datei besteht darin, die Datei sofort in Excel zu öffnen, wenn die Daten automatisch in die entsprechenden Zellen in Excel eingefügt werden.

Konvertieren Sie DataTable in CSV in C#

Der erste Schritt beim Konvertieren einer DataTable in eine CSV-Datei besteht darin, eine DataTable zu erstellen. Die dazu notwendigen Schritte sind in den folgenden Absätzen skizziert.

Erstellen und füllen Sie die DataTable

  • Zunächst müssen wir die folgenden Bibliotheken importieren:

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
  • Wir haben eine Klasse namens datacreation mit einer Methode namens CreateData() erstellt, die eine DataTable als Rückgabewert generiert.

    public static class datacreation {
      public static DataTable CreateData() {}
    }
    
  • Um mit der Dateneingabe zu beginnen, müssen wir ein DataTable-Objekt namens dt in CreateData() erstellen.

    DataTable dt = new DataTable();
    
  • Nachdem das Objekt initialisiert wurde, besteht der nächste Schritt darin, Datenspalten zur DataTable dt hinzuzufügen. Wir haben die Felder Rollnum, Firstname, Lastname und Subject eingefügt, und es steht Ihnen frei, weitere Bereiche hinzuzufügen, die Sie benötigen.

    dt.Columns.Add("RollNum", typeof(int));
    dt.Columns.Add("Firstname", typeof(string));
    dt.Columns.Add("Lastname", typeof(string));
    dt.Columns.Add("Subjects", typeof(string));
    
  • Füllen Sie anschließend die Informationen in diesen Spalten oder Feldern aus.

    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");
    
  • Die Funktion CreateData() gibt eine Tabelle vom Typ DataTable zurück.

    return dt;
    

Konvertieren Sie die DataTable in CSV in C#

Nachdem wir die DataTable erstellt haben, besteht der nächste Schritt darin, den Code zu schreiben, der die DataTable in CSV konvertiert.

  • Wir haben der Klasse implementCSV eine neue Methode namens ConvertTocsv hinzugefügt. Die Variablen dt und path sind die Parameter, die es braucht.

    public static class implementCSV {
      public static void ConvertTocsv(this DataTable dt, string path) {}
    }
    
  • In der ConvertTocsv-Methode haben wir ein StreamWriter-Objekt namens s erstellt, das Daten in den angegebenen Pfad schreibt.

    StreamWriter s = new StreamWriter(path, false);
    
  • Wir verwenden eine for-Schleife, um die Daten aus der DataTable zu trennen, indem wir Kommas zwischen den einzelnen Spalten einfügen.

    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);
    
  • Anschließend verwenden wir nun eine foreach-Schleife, die Daten aus der DataTable dt mit einem Komma schreibt.

    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);
    }
    

Vollständiger Quellcode

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();
    }
  }
}

Ein Windows-Formular erstellen

Nachdem die Daten in der DataTable erstellt und durch Kommas getrennt wurden, wird im nächsten Schritt ein Windows Form erstellt, in dem die Daten angezeigt und anschliessend in das .csv-Format konvertiert werden können.

  • Um zu beginnen, erstellen wir ein Windows-Formular, wie unten gezeigt, und fügen darin eine DataGridView und eine Schaltfläche namens Convert data to CSV ein. Ein DataGridView, der die erstellten Daten anzeigt, und ein Button, der die DataTable in CSV konvertiert, sind enthalten.

    DataTable-Formular

  • Wenn Sie das Windows Form ausgeführt haben, sieht es so aus:

    Laufendes Formular

Schreiben Sie den Code für das Windows Form

Nachdem wir das Windows Form erstellt haben, ist der nächste Schritt, den Code für die Schaltfläche Daten in CSV konvertieren zu schreiben.

  • Initialisieren Sie ein Objekt und füllen Sie es mit Daten, indem Sie die unten aufgeführten Methoden aufrufen.

    DataTable dt = datacreation.CreateData();
    
  • Mit OpenSavefileDialog() kann die Datei unter dem angegebenen Namen gespeichert werden.

    string filename = OpenSavefileDialog();
    
  • ConvertTocsv wird verwendet, um aus den von uns erstellten Daten eine CSV-Datei zu erstellen.

    dt.ConvertTocsv(filename);
    

Windows Form-Quellcode

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

Verwandter Artikel - Csharp CSV

Verwandter Artikel - Csharp DataTable