【发布时间】:2013-10-01 20:38:25
【问题描述】:
我创建了一个网页,员工可以在其中上传 Excel xlsx 文档进行处理,如果满足要求,则返回相同的文档并填写某些关键单元格。它可以工作,但我对它的运行速度不满意。处理 2,500 行需要几分钟时间。
运行如下: 用户上传文件 -> 服务器端打开excel文档并逐行-> 如果当前行的第 31 列 != 10 则连接到 SQL 并根据第 5 列执行查询。-> 查询结果进入该行列 35。-> 下一行。冲洗并重复。 -> 完成后,将文件返回给用户。
虽然这可行,但它也相当慢。有没有人对解决此问题的更好方法有任何想法?
For n = 2 To excelWorkSheet.Rows.Count
Dim thing As String = excelWorkSheet.Cells(n, 5).Value
'only until empty row
If excelWorkSheet.Cells(n, 5).Value = "" Then
Exit For
End If
If excelWorkSheet.Cells(n, 31).Value <> "10" Then
strSQL = "EXEC sp_Lookup_Type " & thing
cmd.CommandText = strSQL
cmd.Connection = cn
rdrSQL = cmd.ExecuteReader()
While rdrSQL.Read()
If Not IsDBNull(rdrSQL("TYPE")) Then
excelWorkSheet.Cells(n, 35).Value = rdrSQL("TYPE")
Else
excelWorkSheet.Cells(n, 35).Value = "NO DATA"
End If
End While
cmd.Dispose()
rdrSQL.Close()
End If
Next
cn.Close()
【问题讨论】:
-
您是打开工作簿然后修改它还是在后台进行?
-
我将文件作为 microsoft.office.interop.excel.worksheet 打开,然后遍历每一行。每行在我迭代时都会被修改,然后在最后保存。这一切都发生在服务器上 - 客户端只是显示一个“正在处理”页面。
-
David 有最好的方法,但提高速度的一种简单方法是在代码开头关闭 screenupdating=false。