Csvhelper: Datentabelle in csv . exportieren

Erstellt am 23. Okt. 2019  ·  4Kommentare  ·  Quelle: JoshClose/CsvHelper

Gibt es eine Implementierung, die den Inhalt einer DataTable in eine CSV-Datei exportiert?

documentation

Hilfreichster Kommentar

@johnyesberg Ups , danke. Ich muss das der Dokumentation hinzufügen.

Sie könnten die Zeilen und Spalten so durchgehen.

void Main()
{
    var dt = new DataTable();
    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));

    var row = dt.NewRow();
    row["Id"] = 1;
    row["Name"] = "one";
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["Id"] = 2;
    row["Name"] = "two";
    dt.Rows.Add(row);

    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {       
        foreach (DataColumn dc in dt.Columns)
        {           
            csv.WriteField(dc.ColumnName);
        }
        csv.NextRecord();

        foreach (DataRow dr in dt.Rows)
        {           
            foreach (DataColumn dc in dt.Columns)
            {
                csv.WriteField(dr[dc]);
            }
            csv.NextRecord();
        }

        writer.ToString().Dump();
    }
}

Oder Sie könnten ein DataReader und es so.

void Main()
{
    var dt = new DataTable();
    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));

    var row = dt.NewRow();
    row["Id"] = 1;
    row["Name"] = "one";
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["Id"] = 2;
    row["Name"] = "two";
    dt.Rows.Add(row);

    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
        using (var reader = dt.CreateDataReader())
        {
            for (var i = 0; i < reader.FieldCount; i++)
            {
                csv.WriteField(reader.GetName(i));
            }
            csv.NextRecord();

            while (reader.Read())
            {
                csv.WriteField(reader.GetFieldValue<int>("Id"));
                csv.WriteField(reader.GetFieldValue<string>("Name"));
                csv.NextRecord();
            }
        }

        writer.ToString().Dump();
    }
}

Wenn es bessere Möglichkeiten gibt, lass es mich wissen. Mit Datentabellen kenne ich mich nicht so gut aus.

Alle 4 Kommentare

Hallo @JoshClose Ich glaube, Wagimo hat nach einer Möglichkeit gesucht, DataTables in CSV-Dateien zu schreiben. Unter dem von Ihnen bereitgestellten Link sehe ich nur Informationen zum Lesen einer CSV-Datei in eine DataTable, nicht jedoch umgekehrt. Verpasse ich etwas?

@johnyesberg Ups , danke. Ich muss das der Dokumentation hinzufügen.

Sie könnten die Zeilen und Spalten so durchgehen.

void Main()
{
    var dt = new DataTable();
    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));

    var row = dt.NewRow();
    row["Id"] = 1;
    row["Name"] = "one";
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["Id"] = 2;
    row["Name"] = "two";
    dt.Rows.Add(row);

    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {       
        foreach (DataColumn dc in dt.Columns)
        {           
            csv.WriteField(dc.ColumnName);
        }
        csv.NextRecord();

        foreach (DataRow dr in dt.Rows)
        {           
            foreach (DataColumn dc in dt.Columns)
            {
                csv.WriteField(dr[dc]);
            }
            csv.NextRecord();
        }

        writer.ToString().Dump();
    }
}

Oder Sie könnten ein DataReader und es so.

void Main()
{
    var dt = new DataTable();
    dt.Columns.Add("Id", typeof(int));
    dt.Columns.Add("Name", typeof(string));

    var row = dt.NewRow();
    row["Id"] = 1;
    row["Name"] = "one";
    dt.Rows.Add(row);

    row = dt.NewRow();
    row["Id"] = 2;
    row["Name"] = "two";
    dt.Rows.Add(row);

    using (var writer = new StringWriter())
    using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
    {
        using (var reader = dt.CreateDataReader())
        {
            for (var i = 0; i < reader.FieldCount; i++)
            {
                csv.WriteField(reader.GetName(i));
            }
            csv.NextRecord();

            while (reader.Read())
            {
                csv.WriteField(reader.GetFieldValue<int>("Id"));
                csv.WriteField(reader.GetFieldValue<string>("Name"));
                csv.NextRecord();
            }
        }

        writer.ToString().Dump();
    }
}

Wenn es bessere Möglichkeiten gibt, lass es mich wissen. Mit Datentabellen kenne ich mich nicht so gut aus.

Ich schlage vor, diese Methode zur Bibliothek hinzuzufügen, weil sie wirklich nützlich ist.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen