title image


Smiley Meine Version braucht nur 10 Ticks (in VB6)
Hallo bear99,



es ist allgemein bekannt, dass der Zugrif von und nach EXCEL extrem langsam ist. Deshalb arbeite ich immer mit dem Trick das gesamte EXCEL-Sheet auf einmal in ein internes Array zu holen. Die Verarbeitung des internen Arrays ist dann natürlich viel schneller als der Zugriff auf EXCEL. Der Code läuft so unter VB6. Müsste aber in .NET genauso funktionieren.





Option Explicit



Private Declare Function GetTickCount Lib "kernel32.dll" () As Long



Private Sub Form_Load()

Dim myExl As New Excel.Application

Dim strTemp As String

Dim lngStart As Long

Dim lngI As Long

Dim lngLastRow As Long ' Letzte belegte Zeile in EXCEL

Dim lngLastCol As Long ' Letzte belegte Spalte in EXCEL

Dim aryExcel As Variant ' Array für das gesamte EXCEL-Sheet



' EXCEL öffnen

myExl.Workbooks.Open "C:\Work\Test01.xls", , True



' Tabelle selektieren:

myExl.ActiveWorkbook.Sheets("Tabelle1").Select



' Startzeit merken

lngStart = GetTickCount()



' Größe der EXCEL-Tabelle ermitteln

lngLastRow = myExl.ActiveSheet.UsedRange.Rows.Count + myExl.ActiveSheet.UsedRange.Rows.Row - 1

lngLastCol = myExl.ActiveSheet.UsedRange.Columns.Count + myExl.ActiveSheet.UsedRange.Columns.Column - 1



' Hole gesamte EXCEL-Tabelle in internes Array

aryExcel = myExl.ActiveSheet.Range(myExl.ActiveSheet.Cells(1, 1).Address, myExl.ActiveSheet.Cells(lngLastRow, lngLastCol).Address)



For lngI = 0 To 5000

strTemp = aryExcel(3, 1)

Next



' Laufzeit ausgeben

MsgBox GetTickCount - lngStart



' EXCEL schließen

myExl.ActiveWorkbook.Close SaveChanges:=False

myExl.Quit

Set myExl = Nothing



End Sub





Gruß

EW

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: