缓慢嵌套' for'循环读取Excel对象

时间:2015-11-25 20:15:25

标签: c# excel sqlite office-interop

我正在处理一个表单,该表单允许我的用户选择电子表格并将其数据复制到SQLite数据库。我的SQLite查询是事务并且在大约一秒钟内发生,但我的代码中运行不正确的部分是它在Excel范围内循环并创建我的insert语句。它是一个嵌套的for循环,遍历所选范围内的所有列和所有行。对于包含360行和43列的电子表格,整个过程大约需要四分钟才能运行。我最初认为它是SQLite插入,所以我将其转换为批量插入。一旦我挖了一下并逐步完成了代码,我就意识到它是' for'循环导致这个。这是我的代码:

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 个答案:

答案 0 :(得分:1)

Importing Excel into a DataTable Quickly

我相信上面的问题可以解决你的问题。 .value2的单个调用导致了问题。您可以将值复制到数组或数据表中,并相应地进行操作以加快速度。