2015-12-14 2 views
-1

Я использую этот код для записи данных в файл excel.Как написать excel C#

Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application(); 
excelapp.Visible = true; 
I am using this code to write to excel. 

_Workbook workbook = (_Workbook)(excelapp.Workbooks.Open(@"C:\Path\To\Your\WorkBook\ExcelWorkBook.Xls")); 
_Worksheet worksheet = (_Worksheet)workbook.ActiveSheet; 

worksheet.Cells[1, 1] = "Name"; 
worksheet.Cells[1, 2] = "Bid"; 

worksheet.Cells[2, 1] = txbName.Text; 
worksheet.Cells[2, 2] = txbResult.Text; 

excelapp.Visible = false; 

Этот код отлично работает, за исключением того, что он работает очень медленно. Я хочу самый быстрый способ написать tot excel. Если я запустил цикл, чтобы написать excel для записи тысяч строк, то он работает медленно. Есть ли более быстрый способ записи данных в файл excel, например, запись целого datatable в файл excel для записи числовых строк одновременно, а не ячейки по ячейке?

+0

Вам нужно включить вычисления, пока вы обновляете данные. Вы должны остановить обновление экрана. Кроме того, вы можете напрямую вставлять многомерные массивы. Но, возможно, что более важно, вам нужно выпустить все объекты маршаллинга и выйти из себя, когда вы закончите. – Enigmativity

+0

Используйте EPPlus, это лучшая библиотека для создания файлов Excel на C#. См. Http://stackoverflow.com/a/2537778/408710 – lukebuehler

ответ

1

Попробуйте вставить массив в Excel вместо:

object[,] arr = new object[rowCount, columnCount]; 
    //Assign your values here 

    Excel.Range c1 = (Excel.Range)worksheet.Cells[0, 1]; 
    Excel.Range c2 = (Excel.Range)worksheet.Cells[rowCount - 1, columnCount]; 
    Excel.Range range = wsh.get_Range(c1, c2); 

    range.Value = arr; 

значения/Чтение Письмо в/из каждой ячейки слишком медленно, и будет потреблять много времени, попробуйте сделать это в памяти.

Смежные вопросы