Excel-Sheet als Dtenbank nutzen und mit Autoit-Anwendung Daten auslesen / eintragen / ersetzen

  • Hallo zusammen.
    Folgende Aufgabenstellung habe ich von einem Kunden bekommen und komme nicht weiter / weiss nicht Mal ansatzweise wie ich anfangen soll

    Es liegt mir eine Exceltabelle vor in der Informationen wie Datum / Kostenstellen / usw. zur Verfügung gestellt werden.

    Ich soll eine Lösung entwerfen die dem Kunden eine benutzerfreundliche Oberfläche zur Verfügung stellt, mit der er Datensätze in der Tabelle bearbeiten kann ohne ewig nach der ensprechenden Zelle suchen zu müssen.

    Wäre toll wenn sich mir jemand annehmen könnte, da ich noch net so wirklich die Ahnung von Programmierung /Autoit habe. :)

  • Naja, du musst schon sagen was genau du möchtest. Vielleicht auch sagen was du schon beherrscht...
    Was du dir anschauen solltest:

    • Gui erstellen
    • Excel (benutzerdefinierte Funktionen)

    Dies findest du unter der AutoIT-Hilfe-Datei.
    Grüße Faweyr :)

  • Ich sachs Mal so, `ne GUI ( sofern das die Benutzeroberfläche sein soll ) erstellen krieg ich zu Not gebacken :S

    Die Exceltabelle sieht in Etwaso aus:

    Kolonne1 Kolonne2 Kolonne3
    Tag: Kostenstelle: Kostenstelle: Kostenstelle:
    Datum: Auftraggeber: Auftraggeber: Auftraggeber:
    Bauvorhaben:

    Kostenstelle2 Kostenstelle2 Kostenstelle2
    Auftraggeber2 Auftraggeber2 Auftraggeber2
    Bauvorhaben2 Bauvorhaben2 Bauvorhaben2

    Hierbei handelt es sich um mehrere Kolonnen, die an einem Tag an mehreren Baustellen Gerüste aufbauen
    Zur Zeit werden Änderungen ( Kolonne / Datum / Umbauzeiten etc. ) handschriftlich nach aufrufen der Tabelle geändert.

    Das Ergebnis soll eine Oberfläche sein die es dem Kunden ermöglicht anhand der Eingabe der Kostenstelle in ein SUCH_Fenster
    Alle Informationen zu dem Bauvorhaben ausgegeben zu bekommen in einem Feld.
    Darüberhinaus soll auch die Möglichkeit bestehen diese Daten zu ändern.

    - grml wenn ich das guicreatordingens wiederfinden würde könnte ich Dir nen Screenshot schicken / exceltabellenscreenshot such ich auch raus.

    btw. Danke :D

    • Offizieller Beitrag

    Wenn der Kunde sowieso in Excel arbeitet, warum verwendest du dann nicht VBA? Du kannst dir innerhalb von Excel deine Eingabemasken erstellen, eigene Controls aufsetzen etc. etc..
    Dazu benötigst du nicht mal VBA-Kenntnisse, läßt sich alles direkt in Excel basteln.
    - Alt+F11 öffnet den VBA-Editor
    - mit <Einfügen> <UserForm> öffnet sich ein GUI-Designer ähnlich Koda
    Alles weitere kannst du dann selber austesten.


    Edit:
    Natürlich kannst du auch die interne Datenbankfunktion nutzen: Menü "Daten" - "Maske" ^^

  • Uii, danke für den Tip, werds gleich Mal testen.

    Danke

    Mike

    *edit: Uiuiuiuiui, das is ja ausserirdisch was man da an Kenntnissen haben muss.
    Bis ich mich da reingefummelt habe vergehen ja Monate ;(

    Einmal editiert, zuletzt von Mike280399 (7. Dezember 2009 um 21:16)

  • Jaaaaa Leichenschänder FTW! :D
    Aaalso, VBA hab ich nu immernoch noch weniger Ahnung von als von AutoIT... wer mich kennt weiss was das heisst :D

    Habe nu etwas ähnliches vor, wie damals schon.
    Es handelt sich um eine Exceltabelle mit massig Informationen.
    Das schöne ist, das die Tabelle recht übersichtlich ist.
    Mit meinem Skript bin ich schon Mal so weit gekommen, das die Tabelle geöffnet wird ( später sollen alle Abfragen im Hintergrund ablaufen ) *Schulterklopf*
    GUI ist auch fertig und die Hilfe in Punkto _ExcelBookAttach und _ExcelReadCell habe ich mir auch schon reingepfiffen, nur fehlts mir wieder Mal am letzten Funken Verständnis :D
    Wie zum Geier lese ich z.B. die Zelle A1 aus und gebe den Wert via GUICtrlSetData aus ?
    Und vor allem, wie lese ich die anderen Zellen anhand des Suchbegriffs aus ?

    Bitte seid so gut und gebt mir doch ein paar Tips / Denkanschubser in die richtige Richtung, Keine fertigen Skriptvorlagen, will mein Hirn schon selbst ein wenig anstrengen :D
    Hier Mal das Skript:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIEdit.au3>
    #include <Excel.au3>
    #include <File.au3>
    #include <Math.au3>

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

    #include <GUIConstants.au3>

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

    #region ### START Koda GUI section ### Form=C:\Program Files (x86)\AutoIt3\Koda\Forms\Excelabfr_1.kxf
    $Form1 = GUICreate("Kostenstellensuche", 344, 360, 474, 179)
    $Group2 = GUICtrlCreateGroup("Suche nach KST", 8, 16, 329, 337)
    $Label8 = GUICtrlCreateLabel("KST:", 24, 74, 28, 17)
    $Label9 = GUICtrlCreateLabel("Auftraggeber:", 24, 101, 68, 17)
    $Label10 = GUICtrlCreateLabel("Bauvorhaben:", 24, 129, 71, 17)
    $Label11 = GUICtrlCreateLabel("Auftragswert:", 24, 156, 66, 17)
    $Label12 = GUICtrlCreateLabel("Kosten:", 24, 183, 40, 17)
    $Label13 = GUICtrlCreateLabel("Erlöse:", 24, 211, 36, 17)
    $Label14 = GUICtrlCreateLabel("Ergebnis:", 24, 238, 48, 17)
    $Label15 = GUICtrlCreateLabel("Menge SL 70:", 24, 265, 71, 17)
    $Label16 = GUICtrlCreateLabel("Menge SL 100:", 24, 293, 77, 17)
    $Label17 = GUICtrlCreateLabel("Bauleiter: ", 24, 320, 51, 17)
    $Input1 = GUICtrlCreateInput("Input1", 16, 40, 75, 21)
    $Button1 = GUICtrlCreateButton("Los !", 256, 40, 75, 25, 0)
    $KST = GUICtrlCreateLabel("KST", 106, 74, 217, 17)
    $AUFTRGG = GUICtrlCreateLabel("AUFTRGG", 106, 101, 217, 17)
    $BAUVORH = GUICtrlCreateLabel("BAUVORH", 106, 129, 217, 17)
    $AUFTRGW = GUICtrlCreateLabel("AUFTRGW", 106, 156, 217, 17)
    $KOSTEN = GUICtrlCreateLabel("KOSTEN", 106, 183, 217, 17)
    $ERLOES = GUICtrlCreateLabel("ERLOES", 106, 211, 217, 17)
    $ERGEBN = GUICtrlCreateLabel("ERGEBN", 106, 238, 217, 17)
    $SL70 = GUICtrlCreateLabel("SL70", 106, 265, 217, 17)
    $SL100 = GUICtrlCreateLabel("SL100", 106, 293, 217, 17)
    $BAULE = GUICtrlCreateLabel("BAULE", 106, 320, 217, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    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]

    Case $Button1
    GUICtrlRead($Input1)
    $sFilePath = @ScriptDir & "\Auftragsl.xls"
    If Not FileExists(@ScriptDir & "\Auftragsl.xls") Then ;Create an .XLS file to attach to
    MsgBox(4096, "Error", " Gibbet nich, Pfad falsch ! - " & @error)
    EndIf

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

    _ExcelBookOpen($sFilePath)
    $oExcel = _ExcelBookAttach($sFilePath) ;with Default Settings ($s_mode = "FilePath" ==> Full path to the open workbook)

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

    EndSwitch
    WEnd

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


    Anhand des Aufbaus der GUI könnt ihr schon erkennen was genau ich da auslesen möchte.
    Die Werte sind in der Tabelle sortiert nach: KST, Auftraggeber, Bauvorhaben, Auftragswert etc...

    Freue mich auf eure Tips und Hinweise..

    Gruß

    Mike

    Einmal editiert, zuletzt von Mike280399 (11. Oktober 2011 um 22:05)

  • Guckst Du _ExcelReadCell und GUICtrlSetData.

    Ein ganz anderer Ansatz ist Excel wirklich wie eine Datenbank zu nutzen. D.h. Zugriff über ADO und ausführen von SQL statements.
    Beispiel oder noch ein Beispiel .

    • Offizieller Beitrag

    Wenn du eine bestimmte Zelle lokalisiert hast (z.B. mit einer Suche) und möchtest auf Nachbarzellen zugreifen empfehle ich die Funktion "Offset":

    [autoit]

    $Wert = $oExcel.Range("A1").Offset($ZEILEN, $SPALTEN).Value

    [/autoit]

    Wobei für $ZEILEN und $SPALTEN gilt:
    0 - ist jeweils die Zeile/Spalte selbst, mit positiven Zahlen verweist man auf 'Spalte rechts/Zeile drunter' und mit negativen Zahlen auf 'Spalte links/Zeile drüber'.

  • kannst du die datei nicht in *.csv speichern ?!?!?

    und dann via Fileread auslesen ?

    ich finde das einfacher .. wie mit dem excel udf. zumal man da doch excel am laufen haben muss .. oder nicht = ?

  • Hi, sry das ich mich erst jetzt wieder zu dem Thema melde :D

    Ich werde mir eure Tips und Ansätze Mal in ruhe ansehen und gucken wie weit ich damit komme.
    Vielen Dank ! :thumbup: