Script um einen Namen einzugeben und den entsprechenden Namen aus einer Tabelle auszugeben

  • Hallo zusammen,

    folgende Situation: Ich habe in etwa 100 Drucker die alle umbenannt wurden. Nun möchte ich ein Script in dem ich den alten Druckernamen eingeben kann und der neue Name ausgespruckt wird. Die Daten dazu habe ich momentan in einer Excel Liste die sehr einfach aufgebaut ist: Spalte 1 = alte Namen, Spalte 2 = der entsprechende neue Name dazu. Nun ist mir aber nicht ganz klar wie ich diese Daten in AutoIt einspeisen soll damit der neue Name ausgegeben wird.

    Vielleicht kann mir hier wer mit Tips behilflich sein :)


    Schöne Grüße
    Gileraracer

  • Aus alten Zeiten:
    Musst nur die Pfadangabe oben ändern und achtung: die erste Zeile im Array (Row[0]) war bei mir immer leer, wusste nich woran es lag, da habe ich im Excelsheet eine neue Ziele ganz oben eingefügt (leer) und dann im Array spatter die erste wieder rausgelöscht. (_ArrayDelete). Musste evtl. selbst irgendwie lösen.

    Spoiler anzeigen
    [autoit]


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

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

    Global $aDrucker[1][2]
    Global $xlsPath = "U:\...\Drucker.xlsx" ;Pfadangabe zur Excel

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

    $aAlteDrucker = _ReadFromExcel("A") ; A = 1. Spalte / alte Druckernamen
    _AddToArray($aDrucker,$aAlteDrucker,0)
    $aNeueDrucker = _ReadFromExcel("B") ; B = 2. Spalte / neue Druckernamen
    _AddToArray($aDrucker,$aneueDrucker,1)

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

    _ArrayDisplay($aDrucker)

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

    ;Paste a 1D Array($iArray) to a 2D Array($oArray) in a certain column($column)
    Func _AddToArray(ByRef $oArray, $iArray, $column)

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

    For $i = 1 To UBound($iArray) -1

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

    $rows = UBound($oArray, 1)
    $columns = UBound($oArray, 2)
    If $rows <= $i Then ReDim $oArray[$rows+1][$columns]
    $oArray[$i][$column] = $iArray[$i]
    Next

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

    EndFunc
    ;Copy a certain column from Excel sheet to an Array
    Func _ReadFromExcel($column)
    Local $data

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

    Local $oExcel = _Excel_Open()
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_Open", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Local $oWorkbook = _Excel_BookOpen($oExcel, $xlsPath)
    If @error Then
    Switch @error
    Case 2
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen", "Specified Filepath does not exist" & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Case 3
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen", "Error opening the selected Excel file." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    Case 4
    MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen", "Readwrite access could not be granted. Workbook might be open by another users/task." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    EndSwitch

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

    ProcessClose("EXCEL.exe")
    Else
    $data = _Excel_RangeRead($oWorkbook, Default, $oWorkbook.ActiveSheet.Usedrange.Columns($column & ":" & $column), 2)
    If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeRead", "Error reading from workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    _Excel_Close($oExcel)
    EndIf

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

    Return $data
    EndFunc

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

    Einmal editiert, zuletzt von draien (21. Januar 2015 um 13:59)

  • Hallo und danke für den Ansatz!


    aktuell bekomme ich mit deinem Script ein Arraydisplay der in der Excel stehenden Namen ausgegeben. Ich krigs aber noch nicht her dass nur der alte Namen in einer inputboxeingegeben und der neue Namen direkt in einer msgbox ausgegeben wird. Ist das kompliziert?

  • Nein ganz und gar nicht. Der Array ist deine Datenbasis(welche auch die Relation zw. neuen und alten Namen darstellt).
    Zuerst einmal brauchst du eine GUI mit einer InputBox. Ich verwende hierzu immer den KodaDesigner (Tastenkombi: Alt+m). Die könnte dann so aussehen:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <MsgBoxConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $mGui = GUICreate("Druckersuche", 340, 60, 192, 124)
    $I_Drucker = GUICtrlCreateInput("", 10, 30, 145, 21)
    $B_Drucker = GUICtrlCreateButton("Neuen Drucker suchen", 200, 20, 129, 33)
    $L_Drucker = GUICtrlCreateLabel("Alter Druckername", 10, 10, 100, 20)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

    [/autoit]

    Jetzt brauchst du nur noch eine Funktion, die den Namen in der InputBox nimmt(bzw. an jene übergeben wird) und den dazugehörigen neuen Namen ausgibt. Die könnte dann so aussehen:

    Spoiler anzeigen
    [autoit]

    Func _Druckersuche($sAlterName)
    For $x = 0 To Ubound($aDrucker)-1
    If $sAlterName = $aDrucker[$x][0] Then ;Überprüft ob x-tes Element im Array dem alten Namen entspricht
    Return $aDrucker[$x][1] ;Gibt den neuen Namen (1. Spalte) zurück
    EndIf
    Next

    Return 0 ;Wenn nichts gefunden wird, gibt 0 zurück
    EndFunc

    [/autoit]

    Jetzt brauchst du nur noch die MsgBox, die aufgerufen wird. Diese könnte man in die While-Schleife der GUI platzieren und die Abfrage könnte so aussehen:

    Spoiler anzeigen
    [autoit]

    If $sNeuerName Then
    MsgBox(0,"Gefunden!","Der Neue lautet: " & $sNeuerName)
    Else
    MsgBox(0,"Fehler","Kein Drucker gefunden (Input überprüfen)")
    EndIf

    [/autoit]

    Jetzt musst du die Sachen nur noch zusammenbauen (mit dem ersten Script im vorherigen Posting) und richtig zuordnen und dann dürfte das klappen.
    Solltest du es nicht schaffen, gibste einfach nochmal bescheid :)

    Edit: Das Programm funktioniert aber nur dann wenn du auch die Excel Tabelle hast, wenn du das Programm jemand anderem geben willst, ohne Excel-Datei, dann musst du entweder alle Daten exportieren, oder von Hand (vielleicht mit AutoIt :P?) in den Code einfügen als Array.