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