vbscript - VBscript优化Excel搜索和删除
问题描述
我有这个我能够构建的 VBScript 函数,它可以打开用户指定的 excel 文件,并开始解析 Sheet 3 的 C 列以查看类别是什么。如果类别不是“水果”,我希望删除整行。该功能按预期工作。但是,我注意到它的效率非常低(100 行大约需要 3 秒),我需要能够扫描近 11 000 行。有没有一种方法可以优化搜索,以便只需几秒钟即可浏览所有记录?
Function prepFile(usrFileSelected)
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(usrFileSelected)
objExcel.Sheets("Sheet3").Activate
intRow = 2
maxRow = objExcel.ActiveSheet.UsedRange.Rows.Count
Do while intRow <= 1000
currentValue = objExcel.Cells(3,intRow).value
If currentValue <> "Fruit" then
objExcel.Rows(intRow).EntireRow.Delete
End If
intRow = intRow + 1
Loop
msgbox("Done")
objWorkbook.Save
objWorkbook.Close
End Function
解决方案
我的第一次尝试是禁用屏幕更新:
Sub prepFile(usrFileSelected)
Dim Excel, Row
Set Excel = CreateObject("Excel.Application")
Excel.ScreenUpdating = False
With Excel.Workbooks.Open(usrFileSelected)
For Each Row In .Sheets("Sheet3").UsedRange.Rows
If Row.Cells(3).Value <> "Fruit" Then Row.EntireRow.Delete
Next
.Save
.Close
End With
Excel.Quit
End Sub
下一个优化想法是使用 Excel 的.Find
方法,看看它是否比手动方法更快。
推荐阅读
- c# - AZURE Blobs .ListBlobs() 扩展了限制
- angular - 如何让 NativeScript 的滑块使用步长值?
- spring - Spring 是否有类似 PHP 的开源包?
- java - 如何删除数组中重复的值?
- java - 如何忽略或处理输入流中的退格键
- amazon-cognito - 在后台线程上将 Cognito 身份验证状态更改发布到 environmentObject
- javascript - 使用 Higcharts 访问数组时出现问题,我如何访问 x 位置?
- postgresql - 使用 sqlalchemy、postgres 和烧瓶进行全文搜索后无法访问数据
- angular - super() 中的 typescript 依赖注入
- flutter - Fluro 包中的 Flutter Navigator 默认路由路由