Ergebnisse in ein Array speichern, erweitern und Information wieder finden.

Statement zur DSGVO im Forum

Alles zur DSGVO und zur Umsetzung im Forum hier: Statement zur DSGVO (letztes Update: 30.05.2018)
  • Hallo zusammen,


    ich bin auf der Suche nach eine Lösung. Mein Problem ist folgende. Ich habe ein Excel mit mehreren Arbeitsblättern. Nun möchte ich ein bestimmten Inhalt suchen und Ergebnisse aus danebenstehende Spalte (+1) rausfinden.

    Mein Vorschlag:

    1. Excell wird geöffnet.

    2. Jeder Blatt in Schleife For $iSheet = 1 To $oWorkbook.Sheets.Count

    3. Jeder Schleife nimmt Info in Array (mit _Excel_RangeRead($oWorkbook, $oWorkbook.Worksheets($iRow).Name, Default, 2)

    4. Array wird erweitert (dritte Demension evtl.) -- Hier hänge ich. Ich dachte $aResultGesamt = _ArrayAdd($aResultGesamt,$aResult) sollte passen. Aber die Funktion _ArrayDisplay($aResultGesamt) zeigt mir nichts an.

    5. In Array Ergebnis rausfinden.


    Wo liegt bei mir ein Fehler ???

    Danke im Voraus

  • Hallo tubsids  


    Aus der Hilfe zu _ArrayDisplay :

    Falls der Funktion ein Array mit mehr als zwei Dimensionen übergeben wird, so gibt die Funktion einen Fehler zurück und das Skript wird fortgesetzt.


    Werte bitte mal @error aus.

    -> 1 = kein Array

    -> 2 = zu viele Dimensionen. Es werden nur 1D und 2D Arrays unterstützt

    Gruß Musashi

    "Die Definition von Wahnsinn ist, immer wieder das Gleiche zu tun und andere Ergebnisse zu erwarten." - Albert Einstein

  • Hallo tubsids

    Also für mich ist da kein Hinweis auf eine dritte Dimension. Aber ich kenne den Code ja auch nicht. Der Tipp von Musashi ist dennoch gut. Immer auf Fehler prüfen.

    Allerdings kommt hier bei _ArrayDisplay gar kein Array mehr an, weil du es vorher schon mit einem numerischen Wert überschreibst. Schau dir mal an, was _ArraAdd für Rückgabe-Werte hat. ;)

  • Hallo und Danke für die Rückmeldungen,



    Zu Fragen:

    $iRet = _ArrayDisplay($aResultGesamt) --> =0

    $iError = @error --> =1




    das Problem ist

    1. Die Blätter sind unterschiedlich befüllt (unterschiedliche Zeilen- und Spaltenzahlen mit Inhalten)

    2. Wie kann man hier eine Lösung finden ? Mehrere Array anlegen würde auch nicht helfen, da ich im Voraus nicht weiss wie viele Inhalten noch kommen.






    ???

    Danke im Voraus und Gruß

  • Selbst wenn die Arrays immer gleich groß wären, würde es ja nicht klappen, weil du das Array ja immer überschreibst. Wie geschrieben, das solltest du ändern ($aResultGesamt = _ArrayAdd($aResultGesamt,$aResult)).

    Man kann das natürlich auch ganz anders manchen. Aber was hindert dich daran, erst die Spalten des neuen Arrays zu ermitteln, zu schauen, ob es mehr sind als die Spalten des bisherigen Array und in diesem Fall das bisherige Array ($aResultGesamt) per ReDim auf die notwendige Größe zu erweitern. Das ist nicht viel Arbeit und dukannst danach dein _ArrayAdd ausführen.

  • Wie kommst du darauf, dass der bisherige Inhalt verloren ginge?


  • Wie kommst du darauf, dass der bisherige Inhalt verloren ginge?

    Ich hatte das hier im Sinn...

    AutoIt
    1. Local $aArray = [111111111,222222222,333333333]
    2. _ArrayDisplay($aArray, '$aArray - Before ReDim')
    3. ReDim $aArray[UBound($aArray)][2]
    4. $aArray[0][1] = 44444444
    5. _ArrayDisplay($aArray, '$aArray- After ReDim')
  • Leute, das einzige Problem wäre doch, wenn die Spaltenüberschriften in den unterschiedlichen Arbeitsblättern an unterschiedlichen Stellen wären. Dann müsste man das ja ganz anders angehen. Da tubsids aber _ArrayAdd verwendet scheint das nicht der Fall zu sein. Die Zeilenanzahl spielt ja keine Rolle. Es geht nur um die Spalten - und da muss das Array nie verkleinert werden sondern nur vergrößert werden, falls im anzuhängendem Array eine größere Anzahl an Spalten vorhanden ist.

    ich glaube es war von der Erweiterung der Dimensionen eines Arrays die Rede

    Das wäre natürlich noch ein Punkt. Mal sehen ob tubsids da noch etwas Klarheit hineinbringen kann.