Excelspalte auslesen und allgemein Felder auslesen

  • Hallo zusammen,

    ich habe ein Problem: Ich würde gerne eine Exeltabelle auslesen. Ich würde jedes Spalte als Array speichern und dies dann anschließend nutzen, um es in ein Formular einzugeben, welches ein Networkmonitoring-Programm speist.
    Mit einer Textdatei hat das schon perfekt geklappt, aber mit der Exeltabelle ist es nicht ganz so einfach...

    Noch eine andere Frage: Gibt es die Möglichkeit, dass allgemein ein Feld irgendwo ausgelesen werden kann, wo etwas drinsteht. Ich setze den Fall: Ich habe ein Programm. Dort steht Text drin und einen Teil davon würde ich gerne auslesen und woandershin kopieren. Oder müsste ich dazu den Text makieren und in die Zwischenablage kopieren und anschließend wieder einfügen?

    Freue mich, wenn sich jemand findet, der mir hilft :)

    LG FKFK

  • Hallo FKFK,

    herzlich willkommen im Forum und viel Spass mit AutoIt. Und hier das Beispiel zu _ExcelReadSheetToArray aus der deutschen Hilfe:

    Spoiler anzeigen
    [autoit]

    ;***************************************************************************
    ; Beispiel 1 – Nach dem Öffnen einer Arbeitsmappe und Rückgabe des Objekt-Handles:
    ; Füllt die Zellen mit Zufallszahlen und liest die Zahlen (Werte) in ein Array ein. Dabei werden verschiedene Parameter verwendet
    ;***************************************************************************

    [/autoit] [autoit][/autoit] [autoit]

    #include <Excel.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Local $oExcel = _ExcelBookNew() ; Erstellt eine neue Arbeitsmappe und zeigt sie an

    [/autoit] [autoit][/autoit] [autoit]

    ; Wir können die Zellen mit einer einfachen Schleife mit Zufallszahlen auffüllen
    For $y = 1 To 10 ; Start in Spalte 1
    For $x = 1 To 15
    _ExcelWriteCell($oExcel, Round(Random(1000, 10000), 0), $x, $y) ; Erzeugt viele Zufallszahlen
    Next
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = _ExcelReadSheetToArray($oExcel) ; Benutzt die vorgegebenen Parameter
    _ArrayDisplay($aArray, "Das Array benutzt die vorgegebenen Parameter")
    $aArray = _ExcelReadSheetToArray($oExcel, 2) ; Startet in der zweiten Zeile
    _ArrayDisplay($aArray, "Startet in der zweiten Zeile")

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = _ExcelReadSheetToArray($oExcel, 1, 2) ; Startet in der zweiten Spalte

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = _ExcelReadSheetToArray($oExcel, 1, 1, 5) ; Liest fünf Zeilen
    _ArrayDisplay($aArray, "Liest fünf Zeilen")

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = _ExcelReadSheetToArray($oExcel, 1, 1, 0, 2) ; Liest zwei Spalten
    _ArrayDisplay($aArray, "Liest zwei Spalten")

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = _ExcelReadSheetToArray($oExcel, 2, 3, 4, 5) ; Startet in der zweiten Zeile der dritten Spalte, liest vier Zeilen und fünf Spalten
    MsgBox(0,'Fehler',"@error: " & @error & @TAB & " @extended: " & @extended)
    _ArrayDisplay($aArray, "Startet in der zweiten Zeile der dritten Spalte, liest vier Zeilen und fünf Spalten")

    [/autoit] [autoit][/autoit] [autoit]

    $aArray = _ExcelReadSheetToArray($oExcel, 1, 1, 0, 0, True) ; Benutzt die vorgegebenen Parameter, außer bei verschobenen Spalten (True)
    _ArrayDisplay($aArray, "Array mit den verschobenen Spalten")

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Verlassen", "OK drücken, um die Datei zu speichern und das Programm zu verlassen")
    _ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Nun speichern wir die Datei in ein temporäres Verzeichnis; existierende Dateien werden dabei überschrieben!
    _ExcelBookClose($oExcel) ; Zum Abschluss verlassen wir das Programm

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Es liest gleich das komplette Tbellenblatt ein.

    mfg (Auto)Bert

  • Dann schonmal vielen Dank, auch für das herzliche Willkommen :)
    Hätte da noch 2 Fragen:
    Die Exel-Datei existiert bereits. Muss ich das dann genauso machen, wie bei Textdateien mit FileOpen und FileClose?
    Bei der Textdatei haben ich mit einer Schleife gearbeitet und variablen Variablen (Variablen, deren Name man durch andere Variablen erzeugt). Ist dies allgemein die beste Lösung oder gibt es da noch eine einfachere Möglichkeit?

  • Hallo FKFK,

    zu Excel: zum öffnen kannst du _ExcelBookOpen verwenden, das fertige sKRIPT KÖNNTE dann so aussehen:

    Spoiler anzeigen
    [autoit]

    ; ***************************************************************
    ; Beispiel 1 - Öffnet eine existierende Excel-Datei und gibt deren Objekt-ID zurück
    ; *****************************************************************

    [/autoit] [autoit][/autoit] [autoit]

    #include <Excel.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $sFilePath1 = @ScriptDir & "\Test1.xls" ; Diese Datei sollte bereits existieren
    $oExcel = _ExcelBookOpen($sFilePath1)

    [/autoit] [autoit][/autoit] [autoit]

    If @error = 1 Then
    MsgBox(0, "Fehler!", "Das Excel-Objekt konnte nicht erstellt werden")
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "Fehler!", "Die Datei existiert nicht!")
    Exit
    EndIf
    $aArray = _ExcelReadSheetToArray($oExcel) ; Benutzt die vorgegebenen Parameter
    _ArrayDisplay($aArray, "Das Array benutzt die vorgegebenen Parameter")
    _ExcelBookClose($oExcel) ; Zum Abschluss verlassen wir das Programm

    [/autoit]

    es ist online aus beiden Hilfe-Beispielen zusammenkopiert und ungetestet. Ich selbst habe kein Ecel installiert, deshalb unbedingt selbst testen.
    Für Variablen verwende ich im Zusammenhang mit Schleifen Array's und benutze den/die Schleifenzähler so z.B.:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $iSpalte, $iZeile, $iZahlOderBuchstabe
    Global $aSuchArray[13][13] ;13 Zeilen ([0] = Beschriftung)und 13 Spalten ([0] = Beschriftung

    [/autoit] [autoit][/autoit] [autoit]

    for $iSpalte = 0 To 11
    $aSuchArray[0][$iSpalte+1]=chr($iSpalte+65) ;Spaltenüberschriften belegen Index 0 in der Dimension "Zeile"
    Next
    for $iZeile = 0 To 11
    $aSuchArray[$iZeile+1][0]=$iZeile+1 ;Spaltenüberschriften belegen Index 0 in der Dimension "Spalte"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    for $iZeile = 1 to 12 ;Zufallszahlen bzw. Buchstaben
    for $iSpalte = 1 to 12
    if $iZeile > 0 and $iSpalte > 0 then
    $iZahlOderBuchstabe = Random(1,2,1)
    if $iZahlOderBuchstabe = 1 Then
    $aSuchArray[$iZeile][$iSpalte] = Random(1,99,1) ;mit Zufallszahlen belegen
    Else
    $aSuchArray[$iZeile][$iSpalte] = chr(Random(65,90,1)) ;mit Zufallsbuchstaben belegen
    EndIf
    EndIf
    Next
    Next
    _ArrayDisplay($aSuchArray)

    [/autoit]

    mfg (Auto)Bert

  • Oh, da habe ich mich verschrieben. Ich hatte das mit der Schleife und den variablen Variablen benutzt, um bei einer GUI, eine variable Anzahl von Auswahlfeldern zu erstellen und die dann auch entsprechend auszulesen, um sie in eine Datei einzutragen.
    Dabei gab es auch immer das Problem, dass die Zahl der auzulesenden Textfelder vorher durch eine Zahl, die man eingibt, definiert wird. Jedoch konnte ich immer nicht überprüfen, ob es eine Zahl ist, die dort per Variable definiert wird. Egal, ob Zahl oder nicht, hat er mir immer ausgegeben, es wäre keine Zahl...

  • Ich hoffe, es ist nicht verboten, dass ich da jetzt noch einen zweiten Beitrag anhänge, um mitzuteilen, dass jetzt alles geklärt ist? Wenn doch, dann bitte ich, das mir nachzusehen. Werde es, sofern es verboten ist, auch nichtmehr machen!

    Auf jeden Fall vielen Dank für alles! Werde mich bestimmt nochmal blicken lassen :) :)

  • Hi,
    könnt ihr mir bitte weiterhelfen.

    Ich will mit Autoit auf Excel zugreiffen was auch ohne Probleme klappt
    ich weis nur leider nicht wie ich auf z.B. Tabelle2 zugreifen kann
    mein Codeabschnitt:

    Code
    While $x <= $zeile 
    $name=$app.Cells($x,1).Value ; 
    $typ=$app.Cells($x,2).Value  ;- Excel auslesen 
    $ap=$app.Cells($x,3).Value   ; 
    $x = $x + 1 
    wend

    Danke vorab