2015-06-30 3 views
1

У меня есть полностью работающее приложение, которое ищет документ Excel для идентификационного номера (набор из 6 чисел). Когда он найдет числа, они помещают их в метки. Мой вопрос заключается в том, что лист excel составляет почти 60000 строк, и требуется некоторое время (даже дольше, когда я ищу по имени). Есть ли способ ускорить его или другой вариант поиска?Поиск большого листа excel (быстрее)

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 
+0

Посмотрите, как использовать встроенную функцию поиска Excel - я сомневаюсь, что вы можете запрограммировать что-нибудь более эффективное, чем Microsoft. –

+0

https://msdn.microsoft.com/en-us/library/office/ff839746.aspx –

ответ

1

Экземпляры вызовов из VB по своей сути медленны. По мере увеличения файлов Excel большая часть времени, затрачиваемого на выполнение вашего кода, - это просто Excel, открывающий файл. Вы можете получить значительное повышение производительности за счет экспорта вашей таблицы в CSV, но вам придется полностью переписать свой код, чтобы прочитать файл с чем-то отличным от Excel, то есть TextFieldParser.

Поскольку у вас есть рабочий код и вы просто хотите повысить производительность, я предполагаю, что эта электронная таблица Excel регулярно обновляется другими пользователями, и преобразование файла вручную не будет практичным. Если это так, вы можете попробовать совет Дейла выше или, если позволяют настройки безопасности вашей среды, подумайте о том, чтобы написать макрос, чтобы автоматически преобразовывать файл Excel каждый раз, когда он обновляется.

Еще один способ сократить время поиска - это сделать звонок в Excel, прежде чем ваш код будет искать результат. Что-то столь же простое, как сделать ваши объекты Excel глобальными и иметь фонового рабочего открыть файл при запуске, устранит задержку открытия файла. Более глубокое решение в этом направлении состоит в том, чтобы ваше приложение поддерживало полностью отдельную базу данных в другом формате и обновляло ее в фоновом режиме или в стратегическое время. Например, фоновый работник может сравнить файл Excel с базой данных SQL при запуске и соответствующим образом обновить его. Если пользователь обычно инициирует поиск до того, как обновление будет завершено, и ежедневное обновление базы данных будет соответствовать вашим потребностям, вы можете вместо этого настроить автоматический запуск процесса, когда никто не будет использовать приложение, например. ежедневно в 2 часа ночи. Я предпочитаю SQL для быстрого поиска, как и те, что были в this question.

Имейте в виду, что эти стратегии связаны с радикальными изменениями в работе вашего кода и будут более активно отлаживать и обновлять вашу программу. Если задержка, которую вы испытываете сейчас, является незначительным неудобством, вероятно, это не стоит усилий по ее изменению. Однако, если это вредит удобству использования вашего приложения, у вас может не быть другого выбора.

+0

Это отличная информация. Спасибо за совет. Прямо сейчас требуется около 30 секунд, чтобы вытащить идентификатор, и, на мой взгляд, это долгий срок использования. Это приложение было всего лишь одним, что я сделал, чтобы помочь мне узнать больше, добавив excel. – dwb

Смежные вопросы