慢速嵌套 'for' 循环读取 Excel 个对象
Slow nested 'for' loop to read Excel objects
我正在开发一种表单,允许我的用户选择电子表格并将其数据复制到 SQLite 数据库。我的 SQLite 查询是事务并且在大约一秒钟内发生,但是我的代码中不正确的 运行 部分是它循环遍历 Excel 范围并创建我的插入语句的地方。它是一个嵌套的 for 循环 运行ning 遍及所选范围内的所有列和所有行。对于具有 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);
如果有人对如何加快速度有任何想法,或者如果我做错了什么,我愿意尝试任何事情。
Importing Excel into a DataTable Quickly
我相信上述问题应该可以解决您的问题。 .value2 的个别调用导致了问题。您可以将值复制到数组或数据表中,并相应地进行操作以加快速度。
我正在开发一种表单,允许我的用户选择电子表格并将其数据复制到 SQLite 数据库。我的 SQLite 查询是事务并且在大约一秒钟内发生,但是我的代码中不正确的 运行 部分是它循环遍历 Excel 范围并创建我的插入语句的地方。它是一个嵌套的 for 循环 运行ning 遍及所选范围内的所有列和所有行。对于具有 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);
如果有人对如何加快速度有任何想法,或者如果我做错了什么,我愿意尝试任何事情。
Importing Excel into a DataTable Quickly
我相信上述问题应该可以解决您的问题。 .value2 的个别调用导致了问题。您可以将值复制到数组或数据表中,并相应地进行操作以加快速度。