большой экспорт datagridview в excel

im пытается экспортировать datagridview в excel (.xls) в приложении winforms, используя visual studio 2010 в C #, проблема заключается в том, что он берет навсегда сохранение, до сих пор у меня есть 4220 строк и 20 столбцов. Есть ли более быстрый способ сделать это. ПРИМЕЧАНИЕ. Я заполняю datagridview из сохраненного файла excel. Я ценю вашу помощь …. мой код сохранения выглядит следующим образом:

private void btnSave_Click(object sender, EventArgs e) { Excel.Application xlApp; Excel.Workbook xlWorkBook; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.Application(); xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); // Get the Header from dataGridView for (int h = 1; h < dataGridView1.Columns.Count + 1; h++) { xlWorkSheet.Cells[1, h] = dataGridView1.Columns[h - 1].HeaderText; } // Get the Cell Values for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { for (int j = 0; j < dataGridView1.Columns.Count; j++) { DataGridViewCell cell = dataGridView1[j, i]; xlWorkSheet.Cells[i + 2, j + 1] = cell.Value; } } //xlWorkBook.SaveCopyAs("\\FORM TEST.xlsx"); xlWorkBook.SaveAs("\\GB STOCK.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); xlApp = null; xlWorkBook = null; GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); } 

Прочитав различные поисковые запросы, и через ответы выше, я натолкнулся на этот код, он работает очень быстро (почти мгновенно) по сравнению с моим оригиналом, где потребовалось менее 2 минут. Я очень благодарен за ваши ответы выше, и я рассмотрю их, особенно метод копирования и вставки, который был интересным для чтения. Я относительно новичок в этом (новое хобби), и я только начинаю понимать некоторые концепции в отношении экспорта наборов данных и т. Д. Я знаю, что это далеко не лучший способ добиться того, что я изложил, но он делает то, что я хочу. на данный момент. Еще раз спасибо всем, кто помог, я многому учусь.

  int cols; //open file StreamWriter wr = new StreamWriter("GB STOCK.csv", false, Encoding.UTF8); //determine the number of columns and write columns to file cols = dgvStock.Columns.Count; for (int i = 0; i < cols; i++) { wr.Write(dgvStock.Columns[i].Name.ToString().ToUpper() + ","); } wr.WriteLine(); //write rows to excel file for (int i = 0; i < (dgvStock.Rows.Count); i++) { for (int j = 0; j < cols; j++) { if (dgvStock.Rows[i].Cells[j].Value != null) { wr.Write(dgvStock.Rows[i].Cells[j].Value + ","); } else { wr.Write(","); } } wr.WriteLine(); } //close file wr.Close(); 

Вы хотите попытаться свести к минимуму количество вызовов, которые вы совершаете между вашим кодом .NET и процессом Excel, – это очень медленно выполнять, поэтому заполнение ячейки за ячейкой занимает много времени.

Лучше поместить содержимое вашей сетки в массив: вы можете сбрасывать это на лист Excel за одну операцию.

Запись массива в диапазон Excel

Использование interop для копирования ячейки по ячейке происходит очень медленно. Вместо этого я бы предложил использовать копию. См. Эту статью msdn для примера того, как копировать данные в буфер обмена; вы можете использовать interop для вставки значений в электронную таблицу.

Попробуйте ExcelLibrary .

«Цель этого проекта – предоставить собственное .NET-решение для создания, чтения и изменения файлов Excel без использования COM-взаимодействия или соединения OLEDB».

COM-объекты обычно медленнее сравниваются с родными библиотеками .NET.

Вы также должны взглянуть на эту тему .

  • Как установить ширину <td> в контенте при экспорте в ячейку XLS
  • При экспорте в Excel индекс был вне диапазона
  • Как программно открыть файл TSV и сохранить его как файл XLSX?
  • Добавить изображения в файл excel с помощью PHP
  • При загрузке файла excel, Get Oledb Exception -Too задано множество полей?
  • white-space: pre; игнорируется / несогласован внутри <td> в экспорте в (сохранить как) .xls
  • Как сохранить формулы и очистить содержимое в Excel с помощью VB.net?
  • Экспорт Listview в Visual Studio в Microsoft Excel
  • Экспорт данных для Excel в Asp.Net MVC с использованием Kendo Grid
  • Как перенести изображения из сетки wijmo flex в автономный лист Excel с помощью Angular js?
  • Как загрузить сгенерированный файл excel из приложения asp.net
  • Interesting Posts

    Использование доступной версии разработки приложений Excel для C #

    Использование хэш-таблицы в powershell

    Зацикливание по строкам, копирование значений ячейки на разные рабочие листы

    Как вы проверяете, действительно ли ячейка загружена только в EXCEL, используя C #

    Excel: дайте оценки на основе диапазона, где max = 1 и min = 10

    Как проверить, защищен паролем файл excel с использованием EPPlus?

    apache poi showInPane – параметр в коротком типе данных

    Как поместить матрицу из определенного листа и ячейки из excel в matlab

    сделать границу в ячейке Excel с помощью C #

    Относительные пути VBA

    Конкатенация и сохранение формата в excel

    Создание пользовательской функции гиперссылки в excel

    Как вставить массив в одну строку в Excel с помощью ClosedXML

    Найти (второе) наибольшее значение именованного диапазона с #VALUE! -error

    Выход из Excel с использованием VBA вызывает ошибку времени выполнения 424

    Давайте будем гением компьютера.