Excel Tabelle/Zeile auslesen und als $Variable in AutoIT benutzen

  • Hallo

    Ich habe über die Suche diverse Themen gefunden,
    jedoch sieh ich nicht so ganz durch.

    Ich habe eine Excel datei die jederzeit gefüllt wird.
    Momentan sind 2601 Zeilen vorhanden.

    Der Benutzer macht eine Eingabe $Input1 nun soll das Excel nach diesem wort durchgescannt werden.
    Wenn das Wort in Tabelle A Gefunden wurde, soll er in der gleichen Zeile in der Tabelle H das Wort nehmen und als Variable speichern,
    danach soll sich eine bestimmte URL mit dieser Variable öffnen.


    Bis jetzt habe ich;

    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <Excel.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 411, 164, 192, 124)
    $Label1 = GUICtrlCreateLabel("Domainname ?", 24, 48, 75, 17)
    $Input1 = GUICtrlCreateInput("Domain", 120, 48, 217, 21)
    $Button1 = GUICtrlCreateButton("OK", 104, 104, 209, 41)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Case $Button1
    _domainname()
    EndSwitch
    WEnd
    Func _domainname()
    $sFilePath1 = @ScriptDir & "X:\Domains.xls" ; Diese Datei sollte bereits existieren
    $oExcel = _ExcelBookOpen($sFilePath1)
    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]

    2 Mal editiert, zuletzt von cr0co (24. April 2014 um 12:16)

  • Nunja wo ist die Schwierigkeit? Schonmal einen Blick in die Hilfe geworfen und geschaut was es alles an Excel Funktionen gibt?

    Da wären z.B.

    [autoit]


    _ExcelSheetList
    _ExcelSheetActivate
    _ExcelReadSheetToArray
    _ExcelReadArray
    _ExcelReadCell

    [/autoit]

    Vorraussetzungen die ebenfalls sinnvoll wären:

    - Der Umgang mit Schleifen
    - Der Umgang mit Arrays -> http://www.bug-fix.info/array_tut.htm

  • Oder Du lädst Dir die aktuelle Beta version von AutoIt herunter.
    Die beinhaltet die neugeschriebene Excel UDF mit Funktionen wie _Excel_RangeFind mit dem man einenRange (in diesem Fall: Spalte A) durchsuchen kann. Das Ergebnis wird in einem Arraye zurückgegeben.

  • Derzeit nur die Hilfe oder die Beispielskripte in der Hilfe.

  • in der Help (mit taste F1) finde ich kein _Excel_RangeFind?

    habs jetzt auch mal mit _ArraySearch versucht. er findet die gesuchte eingabe,
    was muss ich jetzt tun um dann in dieser Zeile wo er die eingabe gefunden hat, die Tabelle H (8) auszulesen,
    und zu benutzen?

    [autoit]


    #include <Excel.au3>
    #include<Array.au3>
    Dim $tes1, $tes2, $tes3, $tes4
    $sFilePath1 = "C:\Dokumente und Einstellungen\Administrator\Desktop\sample.xls"
    $oExcel = _ExcelBookOpen($sFilePath1)
    $tes1 = @error
    If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    ElseIf @error = 2 Then
    MsgBox(0, "Error!", "File does not exist!")
    EndIf
    $aArray = _ExcelReadSheetToArray($oExcel) ;Using Default Parameters
    $tes3 = @error
    $tes4 = @extended
    If @error = 0 Then MsgBox(0, '', 'No errors opening the sheet!', 4)
    If @error > 0 Then MsgBox(0, 'Not Opening the sheet', 'The Extended error for opening the sheet is = ' & @extended, 4)
    _ArrayDisplay($aArray, "")
    $sSearch = InputBox("", "Domainname?")
    $row = UBound($aArray)
    $column = UBound($aArray, 2)
    $iIndex = _ArraySearch($aArray, $sSearch, "", "", "", "", 0, 1)
    ;$aserver = _ArraySearch($aArray, $sSearch, "", "", "", "", 8, $iIndex)
    If @error Then
    MsgBox(0, "Not Found", '"' & $sSearch & '" was not found on column ' & 1 & '.')
    Else
    MsgBox(0, "Found", '"' & $sSearch & '" was found in the array at position ' & $iIndex & ' on column ' & 1 & '.')

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

    ; MsgBox(0, "Found", '"' & $sSearch & '" Server: ' & $aServer & ' on column ' & 1 & '.')
    ;MsgBox(0, "Found", '"' & $sSearch & '" Server: ' & $aServer)
    EndIf

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

    _ExcelBookClose($oExcel) ; Und zum Schluss schließen wir die Datei.

    [/autoit]

    Die auskommentierten Sachen, sind meine Versuche ;)

  • Für die Hilfe zur Beta Version von AutoIt must Du Alt+F1 verwenden.

  • Wenn Du die "alte" Excel UDF verwenden möchtest, dann verwende _ExcelReadCell und übergieb die Zeile (Index von _ArraySearch) und Spalte der auszulesenden Zelle.

  • Für die Hilfe zur Beta Version von AutoIt must Du Alt+F1 verwenden.

    So findet er auch kein _Excel_RangeFind

    Wenn Du die "alte" Excel UDF verwenden möchtest, dann verwende _ExcelReaqdCell und übergieb die Zeile (Index von _ArraySearch) und Spalte der auszulesenden Zelle.

    Verstehe ich leider nicht. Wie meinst du das? bei meinem script liest er ja nur die zeile aus,
    ich möchte dann die spalte H in einer variable benutzen damit ich dann per firefox eine url öffnen kann

  • Bevor wir weiter herumbasteln:
    Willst Du das Problem mit der AutoIt Produktionsversion oder der Beta lösen?

  • No na ned! Lieber reich und gesund als arm und krank.
    Geschwindigkeitsunterschiede gibt es erst ab ca.100-200 Zeilen.

  • Dann empfehle ich die Beta Version von AutoIt.
    Schau Dir mal das Beisipielscript _Excel_RangeFind.au3 an. Da siehst Du wie es geht und welches Ergebnis die Funktion bringt.

  • ah super scheint ja relativ simpel zu sein.


    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <Excel.au3>
    #include <Array.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 411, 164, 192, 124)
    $Label1 = GUICtrlCreateLabel("Domainname ?", 24, 48, 75, 17)
    $Input1 = GUICtrlCreateInput("Domain", 120, 48, 217, 21)
    $Button1 = GUICtrlCreateButton("OK", 104, 104, 209, 41)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _domainname()
    EndSwitch
    WEnd
    Func _domainname()

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

    ; Create application object and open an example workbook
    Local $oAppl = _Excel_Open()
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oAppl, "C:\remo_autoit\sample.xls")
    If @error Then
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example", "Error opening workbook '" & "C:\remo_autoit\sample.xls'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _Excel_Close($oAppl)
    Exit
    EndIf

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

    ; *****************************************************************************
    ; Find all occurrences of value "$Input1" (partial match)
    ; *****************************************************************************
    Local $aResult = _Excel_RangeFind($oWorkbook, "$Input1")
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example 1", "Error searching the range." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeFind Example 1", "Find all occurrences of value '$Input1' (partial match)." & @CRLF & "Data successfully searched.")
    _ArrayDisplay($aResult, "Excel UDF: _Excel_RangeFind Example 1", "", 0, "|", "Sheet|Name|Cell|Value|Formula|Comment")
    EndFunc

    [/autoit]

    So sucht er das excel durch nach $Input1 leider nicht die eingabe des benutzers.
    muss ich da noch einen anderen befehl setzen ?

    2 Mal editiert, zuletzt von cr0co (25. April 2014 um 11:29)

  • [autoit]

    Local $aResult = _Excel_RangeFind($oWorkbook, $Input1)

    [/autoit]

    Du willst ja nach dem Inhalt der Variablen suchen und nicht nach dem String "$Input1".

  • Die Spalte "H" bekommst Du mit _Excel_RangeRead unter der Angabe von "H:H" als Range in einen Array.

  • Kann sein, dass es in einem Beispiel steht. Aber sicher hier im Wiki (noch in Arbeit).