在c#中快速拆分excel文件

我需要按选定的行分割excel文件。 我有相当大的排,所以用手分开花了太多的时间。

worksheet.Range["A1"].EntireRow.Copy(); Microsoft.Office.Interop.Excel.Workbook nowy = excel.Workbooks.Add(); Excel.Worksheet sh = nowy.Sheets.Add(); sh.Name = "test"; Excel.Range r = sh.get_Range("A1", "A1").EntireRow; r.Insert(Excel.XlInsertShiftDirection.xlShiftDown); int y; int limit=range.Rows.Count; for ( y= 2; y <= limit; y++) { ile++; worksheet.Range["A" + y].EntireRow.Copy(); Trace.Write(ile + ","); r = sh.get_Range("A2", "A2").EntireRow; r.Insert(Excel.XlInsertShiftDirection.xlShiftDown); if (worksheet.Cells[y, x].value != worksheet.Cells[y+1, x].value) { osredu=worksheet.Cells[y, x].value; string plik_ = "c:\\plikixml_dzielone\\" + osredu; nowy.SaveAs(plik_, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false, false, Excel.XlSaveAsAccessMode.xlShared, false, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, System.Reflection.Missing.Value); nowy.Close(); worksheet.Range["A1"].EntireRow.Copy(); nowy = excel.Workbooks.Add(); sh = nowy.Sheets.Add(); sh.Name = "test"; r = sh.get_Range("A1", "A1").EntireRow; r.Insert(Excel.XlInsertShiftDirection.xlShiftDown); Trace.WriteLine(Environment.NewLine); Trace.WriteLine(ile_szkol+ "---"+ osredu + " : " + ile); Trace.WriteLine(Environment.NewLine); ile = 0; ile_szkol++; } } 

我匹配这个代码。 它工作正常,但极端缓慢,并locking剪贴板使用。 拆分9500行花了一个小时。 你有什么想法如何提高这个代码的速度?

尝试使用OleDb驱动程序执行此任务。 它应该比自动化更快。

 string sourceConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;Data Source=C:\source\MyExcel.xlsx;"; using (var conn = new OleDbConnection(connectionString)) { // ... } 

我很确定保存o(n)次和做worksheet.Range [“A1”]。EntireRow.Copy(); 每一次都没有必要。 不能真正看到这些variables名称是什么。

但是使用秒表 ,你可以弄清楚自己需要这么长时间。