Создание файла .csv из объекта с#
Создание файла csv из свойств объекта, экранирование запятых и ковычек.
using (var writer = new CsvFileWriter(File.Open(pathToDirectory, FileMode.Create), Encoding.GetEncoding(1251))) { CSVRowCreator row = new CSVRowCreator(); row.MedicalProductRow(medicalProduct, PrepareStringForDbfColumn); writer.WriteRow(row); } }
Класс обработчик строк:
public class CsvFileWriter : StreamWriter { public CsvFileWriter(Stream stream, Encoding encoding) : base(stream, encoding) { } public CsvFileWriter(string filename) : base(filename) { } /// /// Запись строки в файл CSV. /// ///Строка для записи. public void WriteRow(CsvRow row) { if(row == null) return; StringBuilder builder = new StringBuilder(); bool firstColumn = true; foreach (string value in row) { // Добавляем сепаратор если не превая строка if (!firstColumn) builder.Append(','); // Обработка для значений, содержащих запятую или кавычки if (value.IndexOfAny(new char[] { '"', ',' }) != -1) builder.AppendFormat("\"{0}\"", value.Replace("\"", "\"\"")); else builder.Append(value); firstColumn = false; } row.LineText = builder.ToString(); WriteLine(row.LineText); } } }
Класс создатель строк из объекта:
public class CSVRowCreator : CsvRow { public void MedicalProductRow(MyProductObject mp) { Add(mp.Id.ToString()); Add(mp.Name); Add(mp.FactoryName); } } public class CsvRow : List { public string LineText { get; set; } }