【问题标题】:Search large excel sheet (faster)搜索大型 Excel 表(更快)
【发布时间】:2015-06-30 21:18:02
【问题描述】:

我有一个可以在 Excel 文档中搜索 ID 号(一组 6 个数字)的功能齐全的应用程序。一旦找到数字,它就会将它们放入标签中。我的问题是,excel 表几乎有 60000 行,而且需要一段时间(当我按名称搜索时甚至更长)。有没有办法加快搜索速度,或者有其他搜索选项?

    Private Sub SearchID()
    Dim xlApp As Excel.Application
    Dim xlBook As Excel.Workbook
    Dim xlSheet1 As Excel.Worksheet
    Dim rng As Excel.Range
    Dim codeabc As String
    Dim found As Boolean
    Dim i As Integer
    If AssociateID.Text = String.Empty Then
        popup.Close()
        MsgBox("Please make sure 'Associate ID' is filled out")
        Exit Sub
    End If
    xlApp = CreateObject("Excel.Application")
    xlBook = xlApp.Workbooks.Open("G:\grps\every\People Report\HRIS Remedy Report.xls")
    xlSheet1 = xlBook.Worksheets(1)
    rng = xlSheet1.Range("a1:a60000")
    codeabc = (AssociateID.Text)
    found = False
    For i = 1 To rng.Count
        If rng.Cells(i).Value = codeabc Then
            IDLabel.Text = AssociateID.Text
            NameLabel.Text = (rng.Cells(i).offset(0, 1).value())
            DepartmentLabel.Text = (rng.Cells(i).offset(0, 3).value())
            PositionLabel.Text = (rng.Cells(i).offset(0, 2).value())
            found = True
            xlBook.Close()
            popup.Close()
            Exit Sub
        End If
    Next i
    If Not found Then
        MsgBox("Associate ID: " & AssociateID.Text & " is not found. Please check the ID and try again")
        AssociateID.Clear()


    End If
    popup.Close()
    xlBook.Close()
End Sub

【问题讨论】:

标签: vb.net


【解决方案1】:

从 VB 调用 Excel 本身就很慢。随着 Excel 文件变得越来越大,运行代码所花费的大部分时间只是 Excel 打开文件。将电子表格导出为 CSV 可以显着提升性能,但您必须完全重写代码才能使用 Excel 以外的其他工具(即 TextFieldParser)读取文件。

由于您有工作代码并且只想提高性能,我猜这个 Excel 电子表格会由其他用户定期更新,手动转换文件是不切实际的。如果是这种情况,您可以尝试上述 Dale 的建议,或者,如果您的环境的安全设置允许,请考虑编写一个宏以在每次更新 Excel 文件时自动转换它。

另一种减少搜索时间的方法是在代码搜索结果之前调用 Excel。像使您的 Excel 对象全局化并让后台工作人员在启动时打开文件这样简单的操作将消除打开文件的延迟。沿着这些思路更深入的解决方案是让您的应用程序以另一种格式维护一个完全独立的数据库,并在后台或在战略时间对其进行更新。例如,后台工作人员可以在启动时将 Excel 文件与 SQL 数据库进行比较,并根据需要对其进行更新。如果用户通常在更新完成之前启动搜索并且每天更新数据库满足您的需求,您可以将进程设置为在没有人使用该应用程序时自动运行,例如每天凌晨 2:00。我更喜欢使用 SQL 进行快速搜索,this question 中的搜索也是如此。

请记住,这些策略涉及代码操作方式的巨大转变,并且会使调试和更新程序更加复杂。如果您现在遇到的延迟只是轻微的不便,那么可能不值得努力改变它。但是,如果它削弱了您的应用程序的可用性,您可能别无选择。

【讨论】:

  • 这都是很好的信息。感谢您的建议。现在提取一个 ID 大约需要 30 秒,在我看来,使用时间太长了。这个应用程序只是我为帮助我学习更多与 excel 结合而制作的应用程序。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 2014-11-13
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
相关资源
最近更新 更多