Проблема начинается с StringBuilder
и заканчивается File.WriteAllText
.
. StringBuilder
интерпретирует все разрывы строк и заменяет их на \r\n
, а затем File.WriteAllText
делает то же самоевещь.Интерпретация всех разрывов строк и добавление их в файл как «настоящий» разрыв строки.
Вы пытались поместить каждое значение между двумя "
, что является общим, но не существует правила, согласно которому каждая программа должна интерпретировать его таким образом.Поэтому CSV-файлы на самом деле не поддерживают разрывы строк или запятые в значении, потому что большинство редакторов видят разрыв строки как новую строку и запятую как новый столбец.
Так что лучше всегоОдин из способов - удалить их или заменить их на пользовательскую строку, которую каждый, кто работает с этим файлом, знает и может затем заменить.
Так что это будет один из вариантов:
cell.Value?.ToString().Replace("\r\n", "{BREAK}").Replace("\n", "{BREAK}")
Редактировать 1:
var sb = new StringBuilder();
var headers = dataGridView1.Columns.Cast<DataGridViewColumn>();
sb.AppendLine(string.Join(",", headers.Select(column => column.HeaderText).ToArray()));
foreach (DataGridViewRow row in dataGridView1.Rows)
{
var cells = row.Cells.Cast<DataGridViewCell>();
sb.AppendLine(string.Join(",", cells.Select(cell => cell.Value?.ToString().Replace("\r\n", "{BREAK}").Replace("\n", "{BREAK}")).ToArray()));
}
string filepath = "data.csv"; ;
File.WriteAllText(filepath, sb.ToString());