Введение
Экспорт данных в формате 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 и других приложениях. Готовый код можно легко адаптировать под любые нужды.
