Problem mit _ExcelReadCell

  • Guten Morgen meine Freunde vom Pferdefriedhof :party:

    Ich habe mit der Excel Funktion _ExcelReadCell folgendes Problem.

    Anbei ein Ausschnitt aus meinem Script

    [autoit]

    _ExcelSheetActivate($var_excel_open, "Erstens")
    $var_erste_wiegung = _ExcelReadCell($var_excel_open, 6, 8 )
    ;~ MsgBox(0,"Ergebnis erste Wiegung",$var_erste_wiegung & " Tonnen und " & @error)
    IniWrite($var_logpath & "\" & $var_date_ini, $var_aktuelle_bgs_nr, "OUT_ERSTE_WIEGUNG", $var_erste_wiegung)

    [/autoit]

    Wenn Excel noch nicht geöffnet ist, das wird es geöffnet, "_ExcelReadCell" lies meine Zelle aus, und schreibt den Wert in eine INI Datei.

    Soweit alles OK und gut.

    Wenn Excel jedoch dann offen ist, und ich das Script nochmals laufen lasse, dann steht im Ergebnis von "_ExcelReadCell" immer eine 0 (Null). Sobald ich Excel schließe und es wieder über das Script öffnen lasse geht es wieder - aber halt nur dieses eine mal.

    Da Excel eigentlich ja offen sein sollte - ich es jedoch vorher überprüfe - habe ich damit ein grosses Problem, da ich die Zelle eigentlich sehr oft auslesen sollte.

    Wie Ihr in der auskommentierten Messageboxzeile seht, habe ich mir auch schon @error ausgeben lassen.

    Beim Ersten "funktionierenden" Durchgang erhalte ich eine 0, beim Zweiten eine 1.

    Auszug aus der Hilfe:

    Zitat

    1 - festgelegtes Objekt existiert nicht

    Kann mir das bitte mal jemand erklären. Was genau ist hier als "Objekt" gemeint ?

    Hier noch der Teil des Scripts, welches Excel öffnet

    I

    [autoit]

    f WinExists("Microsoft Excel - Abfall.xlsx") Then
    ;MsgBox(0, "", "Das Fenster existiert")
    WinActivate("Microsoft Excel - Abfall.xlsx", "")
    WinSetState("[ACTIVE]", "", @SW_MAXIMIZE)
    Else
    $var_excel_file = @ScriptDir & "\Abfall.xlsx" ; Diese Datei sollte bereits existieren
    $var_excel_open = _ExcelBookOpen($var_excel_file); Excel Datei wird geöffnet

    [/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 " & $var_excel_file & " existiert nicht!")
    Exit
    EndIf

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

    WinActivate("Microsoft Excel - Abfall.xlsx", "")
    WinSetState("[ACTIVE]", "", @SW_MAXIMIZE)
    EndIf

    [/autoit]

    Das Problem herrscht sowohl unter Win7x64 mit Office2010x32, als auch unter Win7x32 mit Office 2007x32

    Freue mich schon auf Eure Antworten

    Gruss Hassan

    Einmal editiert, zuletzt von HassanMullah (15. November 2010 um 12:22)

    • Offizieller Beitrag

    Das Problem entsteht m.M. weil du ab dem zweiten mal versuchst eine bereits geöffnete Datei nochmal zu öffnen.
    Hier ein Bsp., wie es funktioniert (Speichern u. Schließen hab ich nicht integriert, da du vermutlich dieses von Hand machst).

    [autoit]

    Local $oExcel, $oWorkBook
    Local $sFile = "C:\Test.xls" ; die zu bearbeitende XLS
    Local $sSheet = "Tabelle2", $sCell = "A2"

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

    #region - der folgende Bereich muß bei dir dann in einer (zeitgesteuerten) Schleife laufen um immer wieder zu lesen -----------------

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

    ; === 1. versuchen auf ein Excel-Objekt zuzugreifen, falls dieses existiert
    $oWorkBook = ObjGet($sFile, "Excel.Application")
    If @error Then ; Datei noch nicht in Excel geöffnet
    ; === Excel-Objekt neu erstellen
    $oExcel = ObjCreate("Excel.Application")
    ; === gewünschte Datei öffnen
    $oWorkBook = $oExcel.Workbooks.Open($sFile)
    EndIf

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

    ; === Hier kannst du in deine INI schreiben
    ConsoleWrite($oWorkBook.Sheets($sSheet).Range($sCell).Value & @CRLF)

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

    #endregion -------------------------------------------------------------------------------

    [/autoit]