none
Экспорт большого кол-во данных из DataGrid в Excel (С#, WPF) RRS feed

  • Вопрос

  • Коллеги, есть два вопроса:

    1) как экспортировать большого кол-во данных из DataGrid (размер DataGrid 60 столбцов на 15000 строк) в Excel?

    Вот мой код:

                dataGrid1.SelectAllCells ();
                dataGrid1.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
                ApplicationCommands.Copy.Execute (null, dataGrid1);
    
                dataGrid1.UnselectAllCells ();
                String result = ( string ) Clipboard.GetData (DataFormats.CommaSeparatedValue);
             //   String res = ( string ) Clipboard.GetData (DataFormats.Text);
                try
                {
                    StreamWriter sw = new StreamWriter ("export.csv");
                    sw.WriteLine (result);
                    sw.Close ();
                    Process.Start ("export.csv");
                }
                catch (Exception ex)
                {
                    MessageBox.Show (ex.Message);
                }

    в строке 

    ApplicationCommands.Copy.Execute (null, dataGrid1);

    получаю сообщение об ConnectSwitchDeadlock occurred

    Windows messanges. The CLR has been unable to transition from COM context 0x76eef0 to COM context 0x76f060 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time.  и т.д.

    Если данных мало, то все записывает в файл.

    2) но когда записывает в файл названия столбцов некорректны вот Столбец в„–1 Шаг 0 mm Шаг 100 mm взял свой пример вот отсюда почему все записывает в первые ячейки файла Excel?


    11 августа 2015 г. 17:23

Ответы

  • Это все равно что передавать соседу записку по почте, причем пароходом через Австралию. Шансы что что то пойдет не так очень велики.

    Сохраняйте данные непосредственно из их источника. Как именно - зависит от конкретного источника. В целом это будет обычный цикл по строкам с форматированием каждой строки и записью ее в файл. Если надо запишите заголовки отдельно.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа Алексей ЛосевEditor 12 августа 2015 г. 6:11
    • Помечено в качестве ответа AlexFV 12 августа 2015 г. 17:00
    11 августа 2015 г. 23:11
    Модератор
  • Добрый день.

    Во-первых, вы записываете не в файл Excel, а в обычный текстовый файл с разделителями, которые умеет открывать Excel.

    Во-вторых, как вам написали выше, выбирайте данные непосредственно из DataGrid и записывайте их сразу в файл минуя буфер обмена.

    В-третьих, вы можете задать кодировку StreamWriter, для нормального отображения в Excel вам подойдет Windows-1251.

    • Помечено в качестве ответа AlexFV 12 августа 2015 г. 17:00
    12 августа 2015 г. 6:15
    Отвечающий

Все ответы

  • Это все равно что передавать соседу записку по почте, причем пароходом через Австралию. Шансы что что то пойдет не так очень велики.

    Сохраняйте данные непосредственно из их источника. Как именно - зависит от конкретного источника. В целом это будет обычный цикл по строкам с форматированием каждой строки и записью ее в файл. Если надо запишите заголовки отдельно.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Предложено в качестве ответа Алексей ЛосевEditor 12 августа 2015 г. 6:11
    • Помечено в качестве ответа AlexFV 12 августа 2015 г. 17:00
    11 августа 2015 г. 23:11
    Модератор
  • Добрый день.

    Во-первых, вы записываете не в файл Excel, а в обычный текстовый файл с разделителями, которые умеет открывать Excel.

    Во-вторых, как вам написали выше, выбирайте данные непосредственно из DataGrid и записывайте их сразу в файл минуя буфер обмена.

    В-третьих, вы можете задать кодировку StreamWriter, для нормального отображения в Excel вам подойдет Windows-1251.

    • Помечено в качестве ответа AlexFV 12 августа 2015 г. 17:00
    12 августа 2015 г. 6:15
    Отвечающий
  • Спасибо, разобрался, решил задачу 2-мя способами и оба минуя буфер обмена c переводом DataGrid в DataTable.

    12 августа 2015 г. 17:00
  • Пожалуйста. Будут вопросы, обращайтесь, постараемся помочь.
    13 августа 2015 г. 5:14
    Отвечающий