2011-11-05 58 views
0

我的C#應用​​程序從Excel文件中獲取大量數據並處理它,然後將其寫回到文件中。更快的Excel文件訪問C#

的問題是加載從Excel文件中的數據時,它需要一些時間(約7000的Excel場30秒)

我想讓它快,是有通過使它更快的任何方法大量的時間?

的代碼,我用它來獲取數據是:

streamReader = new StreamReader(@"ExcelPath.txt"); 
string path = streamReader.ReadLine(); 

//An Excel Application ==(contains)==> [Many] Excel WorkBook ==(contains)==>[Many] Excel WorkSheets==(contains)==>[Many] Ranges 
Microsoft.Office.Interop.Excel.Application excelapp = new Microsoft.Office.Interop.Excel.Application(); 
Microsoft.Office.Interop.Excel.Workbook myworkbook = excelapp.Workbooks.Open(path, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true); 

Microsoft.Office.Interop.Excel.Sheets myworksheets = myworkbook.Worksheets; 
Microsoft.Office.Interop.Excel.Worksheet myworksheet =myworksheets.get_Item(1); 
Microsoft.Office.Interop.Excel.Range range = myworksheet.UsedRange; 

string[] data = new string[range.Rows.Count]; 
int start = 0; 
for (start = 3; start < range.Rows.Count; start++) 
{ 
    Microsoft.Office.Interop.Excel.Range myrange = myworksheet.get_Range("O" + start.ToString(), System.Reflection.Missing.Value); 
    data[start] = myrange.Text; 
    } 
+0

哪個版本的Excel?看你如何從文本文件中讀取路徑,你是否只運行一個Excel實例?它不在服務器上運行?看看這個KB看看其他gotcha的support.microsoft.com/kb/257757 - 否則範圍方法VS單元格是WTG –

+0

@JeremyThompson Excel 2010,是的,Excel的一個實例,不,不在服務器上... – SKandeel

回答

5

我還沒有在過長...的時間內完成與Excel什麼......但在幾年前,我們能夠加速我們幾個從Excel中讀取數據的過程一次將範圍的單元格寫入數組(而不是逐個單元格地移動)。

從C#到Excel的每個讀取操作都必須經過COM,這非常昂貴。如果您設法減少需要從Excel讀取的次數(例如,通過一次讀取多個值),您應該看到速度顯着提高。

+0

請參閱下面是一些涵蓋Hector建議的示例代碼:http://stackoverflow.com/questions/7919964/low-performance-when-reading-data-from-excel-workbook-to-arraylist-in-c-sharp –