Excel Zelle auslesen und in Variable speichern

  • Hallo,

    ich arbeite neu mit AutoIt und bin nun seit über einer Woche am versuchen eine Excel Zelle auszulesen.
    Ich bekomme aber sogar mit der Beispiel Datei einen Fehler

    Vielleicht kann mir jemand helfen?

    Dies ist mein Code


    #include <Excel.au3>

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

    [autoit]


    Local

    [/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

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

    Fehlermeldung:
    "E:\Eigene Dateien\Autoit\excel.au3" (4) : ==> Incorrect number of parameters in function call.:
    Local $oExcel = _Excel_BookOpen($sFilePath1)
    Local $oExcel = ^ ERROR

    [/autoit]

    Was mache ich falsch?

    Die ganzen Hilfen habe ich versucht alle, und ich meine wirlich alle zu kopieren umzuändern oder was auch immer aber immer ohne Erfolg

    Einmal editiert, zuletzt von skorpion-de (17. Oktober 2015 um 00:11) aus folgendem Grund: Erweiterung

  • Zwei Dinge sind falsch in Deinem Skript:

    • _Excel_open fehlt
    • Schau Dir die Hilfe von _Excel_BookOpen nochmals genau an! Parameter 1 ist falsch

    Die neue Excel-UDF (alle Funktonen starten mit _Excel_) ist nicht kompatibel mit der alten UDF (alle Funktionen starten mit _Excel - also ohne zweiten Unterstrich)

  • Sorry tut mir leid ich versteh das nicht
    schön wäre ein funktionierendes Beispiel

    ich komme weder mit
    _Excel_open
    noch
    _Excel_BookOpen
    weiter

    Und ja ich versuche seit Tagen aus der Hilfe schlau zu werden. Aber scheinbar bin ich zu doof.
    Genau darum wäre ein Beispiel was funktioniert hilfreich. Denn wie es scheint bin ich nicht in der Lage die Hilfe richtig zu lesen und anzuweden.

    Einmal editiert, zuletzt von skorpion-de (17. Oktober 2015 um 00:43)

  • Hast DU schon mal in die Hilfe geschaut?
    In _Excel_RangeRead findest Du genau was Du suchst.

  • Danke erstmal für die Hilfe
    hier erstmal das Ergebnis

    [autoit]


    Dim $oExcel
    Dim $Pfad
    Dim $oWorkbook
    Dim $CellValue

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

    #include <Excel.au3>

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

    Local $oExcel = _Excel_Open(0)

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

    Local $Pfad = @ScriptDir & "\Passwort.xlsx" ; Diese Datei sollte bereits existieren
    Local $oWorkbook = _Excel_BookOpen($oExcel, $Pfad)

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

    $CellValue = _Excel_RangeRead($oWorkbook,"Tabelle1", "A1")

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

    ;MsgBox(0,"wert", $CellValue, 2)

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

    Local $oWorkbook = _Excel_Close($oExcel, $Pfad)

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

    Run("g:\AutoIt3\Examples\FRED.cmd")
    If Not WinActive("Fred Login","") Then WinActivate("Fred Login","")
    sleep(15000)

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

    WinWaitActive("Fred Login","")
    Send($CellValue,1)
    send ("{ENTER}")

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

    WinMove("FRED Einsatzplanung","",1920,0,1920,1050)
    Exit

    [/autoit]
  • Ein paar Tipps:
    Dim sollte durch Global ersetzt werden
    Nach jeder _Excel* Funktion solltest Du prüfen, ob @error = 0, sonst ist ein Fehler aufgetreten der abgefangen werden sollte
    Nach Run würde ich ein WinWait einfügen, damit das Fenster auch sicher existiert bevor Du weiterarbeitest.
    Das Sleep(15000) solltest Du knicken. Wenn Du auf eine Programmfunktion wartest, dann würde ich eher die prüfen. ist verlässlicher
    Statt Send würde ich ControlSend verwenden. Ist dann unabhängig von dem wa der Anwender so macht.

  • Dim habe ich durch Global ersetz

    Einen Fehler, falls es die Excel-Datei nicht gibt zum Auslesen des Wertes sprich Passwort, möchte ich eigentlich nicht abfangen.
    Wenn der User die Datei verschlampert oder umbenennt soll er sich melden wenn es nicht funktoniert.

    Nach Run habe ich ein WinWait eingefügt.
    Hatte das Sleep drin weil ich anfänglich Probleme hatte mit dem Send.

    ControlSend funktioniert leider nicht.

    [autoit]


    Global $oExcel
    Global $Pfad
    Global $oWorkbook
    Global $CellValue

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

    #include <Excel.au3>

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

    Local $oExcel = _Excel_Open(0)

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

    Local $Pfad = @ScriptDir & "\Passwort.xlsx" ; Diese Datei sollte bereits existieren
    Local $oWorkbook = _Excel_BookOpen($oExcel, $Pfad)

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

    $CellValue = _Excel_RangeRead($oWorkbook,"Tabelle1", "A1")

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

    ;MsgBox(0,"wert", $CellValue, 2)

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

    Local $oWorkbook = _Excel_Close($oExcel, $Pfad)

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

    Run("g:\AutoIt3\Examples\FRED.cmd")
    WinWait("Fred Login","")
    If Not WinActive("Fred Login","") Then WinActivate("Fred Login","")

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

    WinWaitActive("Fred Login","")
    Send ($CellValue,1)
    Send ("{ENTER}")

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

    WinMove("FRED Einsatzplanung","",1920,0,1920,1050)
    Exit

    [/autoit]