Экспорт данные в CSV C#

Введение

Экспорт данных в формате CSV — один из самых распространённых способов сохранения таблиц для последующего анализа или импорта в Excel. В этой статье вы узнаете, как просто сохранить содержимое DataTable или DataView в .csv-файл на C# с помощью встроенных средств .NET Framework.

using System;
using System.Data;
using System.Windows.Forms;
using System.IO;

private void ExportDatatviewToCsv(string iFilename, DataView dv)
{
    // Open output stream
    StreamWriter swFile = new StreamWriter(iFilename);

    // Header
    string[] colLbls = new string[dv.Table.Columns.Count];
    for (int i = 0; i < dv.Table.Columns.Count; i++)
    {
        colLbls[i] = dv.Table.Columns[i].ColumnName;
        colLbls[i] = GetWriteableValueForCsv(colLbls[i]);
    }

    // Write labels
    swFile.WriteLine(string.Join(",", colLbls));

    // Rows of Data
    foreach (DataRowView rowData in dv)
    {
        string[] colData = new string[dv.Table.Columns.Count];
        for (int i = 0; i < dv.Table.Columns.Count; i++)
        {
            object obj = rowData[i];
            colData[i] = GetWriteableValueForCsv(obj);
        }

        // Write data in row
        swFile.WriteLine(string.Join(",", colData));
    }

    // Close output stream
    swFile.Close();
}

private void ExportDatatableToCsv(string iFilename, DataTable dt)
{
    // Open output stream
    StreamWriter swFile = new StreamWriter(iFilename);

    // Header
    string[] colLbls = new string[dt.Columns.Count];

    for (int i = 0; i < dt.Columns.Count; i++)
    {
        colLbls[i] = dt.Columns[i].ColumnName;
        colLbls[i] = GetWriteableValueForCsv(colLbls[i]);
    }

    // Write labels
    swFile.WriteLine(string.Join(",", colLbls));

    // Rows of Data
    foreach (DataRow rowData in dt.Rows)
    {
        string[] colData = new string[dt.Columns.Count];

        for (int i = 0; i < dt.Columns.Count; i++)
        {
            object obj = rowData[i];
            colData[i] = GetWriteableValueForCsv(obj);
        }

        // Write data in row
        swFile.WriteLine(string.Join(",", colData));
    }

    // Close output stream
    swFile.Close();
}

public static string GetWriteableValueForCsv(object obj)
{
    // Nullable types to blank
    if (obj == null || obj == Convert.DBNull)
        return "";

    // if string has no ','
    if (obj.ToString().IndexOf(",") == -1)
        return obj.ToString();

    // remove backslahes
    return "\"" + obj.ToString() + "\"";
}

Что делает этот код

  • Экспортирует данные с сохранением заголовков.
  • Экранирует значения с запятыми для совместимости с CSV.
  • Использует StreamWriter для записи в файл.
  • Работает с DataView и DataTable.

Заключение

Этот простой и гибкий способ поможет вам быстро сохранять данные из таблиц в формате CSV для отчетов, резервного копирования или дальнейшей обработки в Excel и других приложениях. Готовый код можно легко адаптировать под любые нужды.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.