Streamwriter добавляет лишнюю строку, которая прерывается случайным образом при экспорте из visual studio в csv c #

Я уже некоторое время пытаюсь экспортировать таблицу данных в CSV в visual studio после регистрации данных.

По какой-то причине я получаю странные результаты при импорте в excel, тогда как блокнот в порядке. Кажется, что строки разрывов добавляются, но в случайных точках в данных.

Я сражаюсь с этим какое-то время, поэтому любая помощь ценится!

Версия Excel

Версия для Блокнота

void SaveAllData() { { saveFileDialog1.InitialDirectory = "C"; // open save file window saveFileDialog1.Title = "Save as CSV File"; // promt save as csv saveFileDialog1.FileName = DateTime.Now.ToString("dd.MM.yy_HH.mm"); saveFileDialog1.Filter = "CSV File | *.csv"; // csv format if (saveFileDialog1.ShowDialog() != DialogResult.Cancel) // if save dialog opens { string value = ""; DataGridViewRow dr = new DataGridViewRow(); StreamWriter swOut = new StreamWriter(saveFileDialog1.FileName, true, Encoding.ASCII); //write header rows to csv for (int i = 0; i <= IncomingDataTable.Columns.Count - 1; i++) { if (i > 0) { swOut.Write(","); } swOut.Write(IncomingDataTable.Columns[i].HeaderText); } swOut.WriteLine(); //write DataGridView rows to csv for (int j = 0; j <= IncomingDataTable.Rows.Count - 1; j++) { if (j > 0) { swOut.WriteLine(); } dr = IncomingDataTable.Rows[j]; for (int i = 0; i <= IncomingDataTable.Columns.Count - 1; i++) { if (i > 0) { swOut.Write(","); } value = dr.Cells[i].Value.ToString(); swOut.Write(value); } } swOut.Close(); } MessageBox.Show("Your data has been successfully saved.", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information); // alert user file has saved serialPort1.Close(); // close serial port Setup_Page f1 = new Setup_Page(); // open setup page this.Hide(); f1.ShowDialog(); Close(); // close this page } } 

Если ваши входные данные содержат переводы строк и вы их выводите, некоторые приложения будут рассматривать их как разрывы строк, но некоторые не будут. Блокнот не работает, поэтому он выглядит как одна строка для «Блокнота». Excel распознает строки и начинает новую строку. Откройте CSV-файл в WordPad вместо Notepad; WordPad распознает линейные переводы, тогда как они незаметны в «Блокноте».

Простое исправление – вызывать String.Trim на ваших входных данных перед его записью. Однако, как сказал Магнус, библиотеки – ваш друг. Если бы вы использовали хороший, это, возможно, не было проблемой в первую очередь, так как хорошо написанная библиотека обрабатывала встроенные новые строки в данных.

Вы можете сказать, что вы можете обрезать новые строки. Ну, а что, если новая линия находится в середине ваших данных? Trim не справится с этим. Не будет никаких новых строк? Как насчет запятых? Нет никаких запятых, потому что данные только числовые? Что, если это десятичное число, а компьютер, который его создал, находится во Франции или во многих других странах, которые используют запятую в качестве десятичного разделителя? Как насчет котировок в данных? Возможно, библиотека уже обработала все эти случаи. (Десятичный разделитель запятой может все еще быть проблемой для тех, кто использует выход, но по крайней мере CSV будет хорошо сформирован.)

Однако обратите внимание, что CSV не является четко определенным стандартом. Различные приложения и библиотеки используют разные стратегии для обработки вышеуказанных случаев, поэтому, если ваша библиотека не использовала тот же формат, что и Excel, она все равно может не загружаться правильно.

  • Цикл через каждую ячейку в выбранном диапазоне
  • Установка Font.Bold и Column.Width для ячеек в OPEN XML
  • Как не вешать Excel?
  • делая ленту ax excel, которая передает столбцы с расширенными листами в другую программу / API
  • NPOI Редактирование файлов Excel с сводными таблицами и динамическими диаграммами
  • Получение данных из Cognos (сценариев)
  • Внешний вид Windows Forms
  • Разбор текстового файла и создание отчета Excel
  • VB: изменение формы после заполнения данных
  • Представление целых чисел в Excel 2010 и Excel 2003 (плагин C ++)
  • Excel не будет открывать / запускать VSTO AddIn при запуске в режиме отладки Visual Studio 2010
  • Давайте будем гением компьютера.