VB6.0 Datenreihe aus excelsheet importieren

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Achim.

    VB6.0 Datenreihe aus excelsheet importieren

    Hallo!

    Ich muss für ein VB6.0 Programm daten aus einer Excelmappe in ein Visual Basic programm einlesen.

    Ich lese momentan jeden wert einzeln per schleife ein und weise ihm einen platz in einem array zu.

    ich muss 10 spalten mit jeweils über 3000 werten einlesen.

    gibt es eine möglichkeit die komplette spalte auf einmal einm array zuzuweisen? ( irgend ein range befehl oder so?)

    mit einzelner einlesung dauert die ganze sache mit dem einlesen so ca 5 minuten.

    Ein muss ist:
    ich kann an der datenquelle nichts ändern, d.h. ich komm nicht um das excelltabellenblatt rum.
    Und: ich möchte in VB6.0 programieren und nicht in VBA

    dann zeigt mal, was ihr könnt, denn ich kanns nicht.

    Danke im voraus
    Zeig und doch deine Schleife, vllt lässt sich da was optimieren.
    Alternativ die Exceltabelle als CSV speichern und die csv als normale Textdatei öffnen und ins array via split schreiben...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    die schleife ist poplig

    zeile=1
    do until exws2.cells(zeile,1).value = ""
    Redim preserve t(zeile)
    t(zeile) = exws2.cells(zeile,1).value
    zeile = zeile + 1
    loop

    redim n(zeile)
    redim M(zeile)
    ...

    do until exws2.cells(zeile,1).value = ""
    n(zeile) = exws2.cells(zeile,2).value
    M(zeile) = ex...
    ...
    zeile = zeile + 1
    loop

    das ganze für gut 10 variablen. und jeweils 3000 Werte
    könnten über kurz oder lang auch 20000 werden.

    bei 3000 dauert die ganze sache schon über 2 Minuten.

    MfG
    Hi!

    Visual Basic-Quellcode

    1. Redim preserve t(zeile)

    Das Redim benötigt oft viel Zeit, weil unter umständen ALLE Daten wo anders hin kopiert werden müssen, da nach dem array evntl. schon wieder eine andere Variable steht.

    Das Prinzip von dynamic Arrays aus PHP funktioniert so, dass zuerst eine geringe anzahl (in deinem fall z.B. 100) array-elemente "reserviert" (=redim) werden und beim 101. element, dass rein geschrieben werden soll wird die anzahl verdoppelt...

    Das sieht dann in etwa so aus:

    Visual Basic-Quellcode

    1. Redim Array(99)
    2. 'Lesen ...
    3. Redim Preserve Array((99+1)*2)
    4. 'usw


    [EDIT:]Bei PHP wird glaub ich mit 2 angefangen ...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mad Andy“ ()

    Anstatt jedes mal das Array zu vergrößern kannst du auch erst die Größe ermitteln und dann alles eintragen:

    Visual Basic-Quellcode

    1. anzahl = 0
    2. do until exws2.cells(anzahl + 1, 1).value = ""
    3. anzahl = anzahl + 1
    4. loop
    5. Redim t(1 to anzahl)
    6. for zeile = 1 to anzahl
    7. t(zeile) = exws2.cells(zeile,1).value
    8. next zeile


    Edit: hab ein paar sachen vergessen, jetzt ist es korrekt
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Agent“ ()

    Danke für eure antworten.

    Ich hab heut den ganzen Tag rumgetüftelt und holl mir die dateien jetzt über eine connection mit recordset. Wird zwar alles als String eingelesen, aber mit nachträglichem konvertieren bleib ich immernoch unter 5 Sekunden.

    Sorry, dass ich net gleich bescheid gesagt hab. läuft auch erst seit ner halben stunde