using System; using System.Windows.Forms; using System.Data; using System.IO; using System.Text; namespace sqllite_test { class dt_export_to_csv { #region Создание CSV //Передаваемые параметры - Таблица, имя файла, символ разделитель, Выгружать или нет имена столбцов public static void Create(DataTable dt, string strFilePath, string separator, bool ColName) { if (strFilePath == string.Empty) return; if (!testseparetor("", separator)) return; StringBuilder str = new StringBuilder(); #region ColumnNameToCSV if (ColName) { for (int i = 0; i < dt.Columns.Count; i++) { if (testseparetor(dt.Columns[i].ToString(), separator)) { str.Append(dt.Columns[i].ColumnName); str.Append(i == dt.Columns.Count - 1 ? "\n" : ";"); } else { MessageBox.Show("Имя столбца (" + dt.Columns[i].ToString() + ") не должно содержать символ разделитель!"); return; } } } #endregion #region DataTableToCSV foreach (DataRow dr in dt.Rows) { foreach (object field in dr.ItemArray) { if (testseparetor(field.ToString(), separator)) { str.Append(field.ToString() + separator); } else { MessageBox.Show("Значение в поле " + field.ToString() + " содержит символ-разделитель"); return; } } str.Replace(separator, Environment.NewLine, str.Length - 1, 1); } #endregion try { File.WriteAllText(strFilePath, str.ToString(), Encoding.UTF8); } catch (Exception ex) { MessageBox.Show("Write Error - " + ex.ToString()); } } #endregion #region Проверяет строку на присутствие символа разделителя private static bool testseparetor(string str, string separator) { if (separator != string.Empty) { if (str.IndexOf(separator) == -1) { return true; } else { return false; } } else { MessageBox.Show("Символ-разделитель не должен быть пустым!"); return false; } } #endregion } }
Вызов класса осуществляется следующим образом -
private void btnExpToCSV_Click(object sender, EventArgs e) { //CreateCSVFile //Имя таблицы, Имя файла, Символ разделитель, выгружать ли первой //строкой имена столбцов dt_export_to_csv.Create(DT, "test.csv", ";", true); }
Комментариев нет:
Отправить комментарий