2015-11-25 40 views
2

我正在处理一个表单,它将允许我的用户选择电子表格并将其数据复制到SQLite数据库。我的SQLite查询是事务,发生在大约一秒钟内,但我的代码中没有正确运行的部分是它通过Excel范围循环并创建我的插入语句的地方。它是一个嵌套的循环,用于遍历所选范围和所有行中的所有列。整个360行和43列电子表格的整个过程需要大约四分钟的时间才能运行。我最初认为这是SQLite插入,所以我将它转换为批量插入。一旦我挖了一点,并通过代码,我意识到这是'for'循环造成的。这里是我的代码:缓慢嵌套'for'循环读取Excel对象

int counter = 1; 
     string contents = null; 
     string bulkInsert = null; 
     Excel.Application xlApp = new Excel.Application(); 
     Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(file); 
     Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1]; 
     Excel.Range xlRange = xlWorksheet.UsedRange; 

     int rowCount = xlRange.Rows.Count; 
     int colCount = xlRange.Columns.Count; 

     for (int i = 2; i <= rowCount; i++) 
     { 

       for (int j = 1; j <= colCount; j++) 
       { 
        contents = contents + Convert.ToString("'" + xlRange.Cells[i, j].Value2) + "',"; 


        //MessageBox.Show(xlRange.Cells[i, j].Value2.ToString()); 


       } 
       contents = contents.Remove(contents.Length - 1); 
       bulkInsert = bulkInsert + "INSERT INTO DeferralInput VALUES (" + contents + "); "; 
       contents = ""; 
     } 

     bulkInsert = "BEGIN TRANSACTION; " + bulkInsert + " COMMIT;"; 
     xlApp.Quit(); 
     ExecuteQuery(bulkInsert); 

如果任何人有关于如何加快这有什么想法,或者如果我做错了,我打开尝试任何事情。

回答

1

Importing Excel into a DataTable Quickly

我相信上面的问题应该可以解决你的问题。 .value2的个人电话正在引发问题。你可以将值复制到数组或数据表中,并相应地进行操作来加快速度。

+0

你是对的,先生。感谢您在感恩节前一天为我节省大量头痛!这现在需要所有的毫秒。 – VinnyGuitara

+0

不客气。我很高兴我能帮上忙。 – Maertin