title image


Smiley .NET Excel in Array packen ?!
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



Was bei meiner Excel Tabelle schlecht ist, ist das sie ca 70x1000 Zellen hat, sprengt das dann den Speicher und ich muss bei Excel bleiben oder kann man das trotzdem noch gut in einen Array packen? Ein weiteres Problem ist, dass ich auch prüfen muss ob eine Zeile fett geschrieben ist, kann man das dann auch in den Array oder einen 2. packen, wenn ja wie? thx

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: