Excel in Array lesen und bestimmte Werte finden

  • Hallo zusammen,

    ich stecke (wie so oft in letzter Zeit bei AutoIT) in einer Sackgasse.

    Ich möchte, dass mein Tool eine Exceldatei ausliest und anschliessend dort einen Wert, der vorher in einer Variable deklariert ist sucht und die Spalten dahinter ausgibt. Ich erkläre es anhand eines Beispiels.

    In der Excel-Datei stehen Postleitzahlen in einer Spalte, in einer weiteren der zuständige Mitarbeiter für dieses Gebiet und in noch einer weiteren kommt die Telefonnummer des Mitarbeiters.

    Anhand des folgenden Code-Schnipsels kann er mir wenigstens schonmal die Excel auslesen und in ein Array packen:


    AutoIt
    $oExcel = _Excel_Open(False,False,True,True,True)  ;// Excel invisible, read-only
    If @error Then Exit MsgBox(16, "Excel UDF: _Excel_BookOpen Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    $sFilePath1 = "M:\SV\BDG\Zip-Finder\2015 Mini Zip Finder DE.xlsx" ; Diese Datei sollte bereits existieren
    $oExcel = _Excel_BookOpen($oExcel,$sFilePath1,True)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen Example 1", "Error opening '" & $sFilePath1 & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $aResult = _Excel_RangeRead($oExcel, Default, $oExcel.ActiveSheet.Usedrange.Columns("A:F"), 1)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead Example 3", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _ArrayDisplay($aResult, "Excel UDF: _Excel_RangeRead Example 3 - Formulas in column A - F")
    _Excel_BookClose($oExcel) ; Zum Abschluss verlassen wir das Programm
    _Excel_Close($oExcel)

    In Zeile 6 kann man sehen, dass der Spalte A-F ausliest. Wobei ich jedoch nur Spalte A, D und F benötige. Hab es allerdings nicht anders hinbekommen, dass er mir nur die 3 gewünschten Spalten ausliest.

    In Spalte A stehen alle Postleitzahlen, in Spalte D die Namen und in Spalte F die Telefonnummern. Ziel ist, dass er mir eine vorher per Variable vorgegebene Postleitzahl aus der Exceldatei ausliest und mir einfach nur ausgibt, wer der Mitarbeiter dort ist, mit dessen Telefonnummer. Hier im Anhang habe ich als Bild hochgeladen, wie der Array aussieht, den er mir wieder gibt.

    Kann mir da jemand weiterhelfen ?(


    LG
    Mirko

    • Offizieller Beitrag

    In Spalte A stehen alle Postleitzahlen

    Wenn das PLZ für DE sein sollen, solltest du dringend das Zellformat ändern. Excel kann keine PLZ, also verwende Text oder Benutzerdefiniert: 5 Ziffern mit Vornull

    in Spalte D die Namen und in Spalte F die Telefonnummern.

    Mit _ArraySearch in Spalte 0 den PLZ-Wert deiner Vorgabe suchen - Rückgabe ist der Zeilen-Index im Array.
    Name ist dann Array[Index][4] und Telefon ist Array[Index][5].

  • Eieiei.... danke für den Denkanstoss... genau damit klappts natürlich :)

    _ArraySearch sei dank - das hatte ich vorher nicht gefunden...

    Wen es interessiert hier noch das Lösungsskript:

    Danke BugFix ;)

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Du könntest natürlich auch Excel selbst suchen lassen mit Funktion _Excel_RangeFind. Due kriegst die Adresse der gefundenen Zelle(n) zurück. Mit der Methode "Offset" kannst Du Dir dann die benötigten Zellen rechts davon zurückgeben lassen.