【问题标题】:Slow nested 'for' loop to read Excel objects用于读取 Excel 对象的慢速嵌套“for”循环
【发布时间】:2015-11-26 05:30:06
【问题描述】:

我正在制作一个表单,它允许我的用户选择电子表格并将其数据复制到 SQLite 数据库。我的 SQLite 查询是事务,大约在一秒钟内发生,但我的代码部分未正确运行是它在 Excel 范围内循环并创建我的插入语句的地方。它是一个嵌套的 for 循环,在选定范围内的所有列和所有行上运行。运行 360 行 43 列的电子表格的整个过程大约需要 4 分钟。我最初认为它是 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);

如果有人对如何加快速度有任何想法,或者如果我做错了什么,我愿意尝试任何事情。

【问题讨论】:

    标签: c# excel sqlite office-interop


    【解决方案1】:

    Importing Excel into a DataTable Quickly

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

    【讨论】:

    • 您说得对,先生。谢谢你在感恩节前一天让我头疼不已!现在这需要一毫秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多