Как экспортировать данные в файл CSV в C #, чтобы убедиться, что Excel может работать с ним? - PullRequest
0 голосов
/ 03 апреля 2012

Мы экспортируем список информации о дилере в CSV, чтобы клиент мог работать с ним в Excel и импортировать его обратно в приложение.

Когда мы редактируем сам файл CSV, он отлично работает, но когдаExcel открывает и сохраняет файл, он теряет всю структуру CSV.

Кавычки удаляются, а также удаляются точки с запятой.

Наш код экспорта теперь выглядит следующим образом:

Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("content-disposition", string.Format("attachment;filename=export_dealers_{0}_{1:yyyy-MM-dd-HH-mm}.csv; charset=utf-8", countryCode, DateTime.Now));
Response.ContentType = "text/csv";
Response.AddHeader("Pragma", "public");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.BinaryWrite(Encoding.UTF8.GetPreamble());
Response.Write(ToCsv(list));
Response.Flush();
Response.End();

Функция toCSV просто возвращает строку со всеми полями, каждое из которых находится в кавычках, разделенных точкой с запятой.

Раньше у нас было по-другому, но нам пришлось добавить дополнительные данные кодирования, чтобы не искажатьспециальные символы, такие как ç или ñ ...

Приведенный выше фрагмент кода экспортирует CSV-файл, который кажется правильным, но когда Excel открывает его и сохраняет (даже без изменения поля)) все точки с запятой и кавычки удаляются, и если вы попробуете функцию Save as, она обнаружит, чтобы сохранить ее как файл .txt вместо CSV.

1 Ответ

0 голосов
/ 03 апреля 2012

Это прекрасно работает для меня:

var lines = new string[10][];

var csv = string.Join("\r\n", lines.Select(words =>
              string.Join(",", words.Select(word =>
                  "\"" + word.Replace("\"", "\"\"") + "\"")))));

File.WriteAllText("file.csv", csv);

Excel читает его в простейшем виде.

...