Excel-Tabelle

  • Ich brauche hilfebei einem meiner scripts. Ich würde gerne eine art tabelle in mein gui einfügen. Die tabelle soll 6 spalten haben und man sollim fertigen programm neue zeilen hinzufügen können. Die höhe der Zeile soll sich an den Text anpassen, der einmal reingeschrieben werden soll und diese höhe soll in allen spalten gleich sein. Das was in die einzelnen felder geschrieben wird, soll in einer datei gespeichert werden und beim erneuten ausführen des programms soll der text wieder in den feldern stehen.

    Ich würde mich über anregungen oder beispielscripts freuen und bedanke mich schonmal im vorraus :D :D

  • Schau mal in der Hilfe nach GUICtrlCreateListView. Damit kann man eigentlich sowas machen.

    Edit: Oder schau allgemein nach ListViews

    Edit2: Wieso machst du noch ein Thread mit dem gleichen Thema auf. Ist doch das gleiche wie hier oder: [ offen ] Tabelle???

    Edit3: Hier noch ein kleines Beispiel dafür (hab ich aus der Hilfe :) ) :

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $listview, $button, $item1, $item2, $item3, $input1, $msg

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

    GUICreate("Listview Einträge", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
    GUISetBkColor(0x00E0FFFF) ; Ändert die Hintergrundfarbe

    $listview = GUICtrlCreateListView("Spalte1 |Spalte2|Spalte3", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
    $button = GUICtrlCreateButton("Wert?", 75, 170, 70, 20)
    $item1 = GUICtrlCreateListViewItem("Eintrag2|Spalte22|Spalte23", $listview)
    $item2 = GUICtrlCreateListViewItem("Eintrag1|Spalte12|Spalte13", $listview)
    $item3 = GUICtrlCreateListViewItem("Eintrag3|Spalte32|Spalte33", $listview)
    $input1 = GUICtrlCreateInput("", 20, 200, 150)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; Erlaubt drag&drop
    GUISetState()
    GUICtrlSetData($item2, "EINTRAG1")
    GUICtrlSetData($item3, "||SPALTE33")
    GUICtrlDelete($item1)

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $button
    MsgBox(0, "Listview Einträge", GUICtrlRead(GUICtrlRead($listview)), 2)
    Case $msg = $listview
    MsgBox(0, "Listview", "angeklickt=" & GUICtrlGetState($listview), 2)
    EndSelect
    Until $msg = $GUI_EVENT_CLOSE
    EndFunc ;==>Example

    [/autoit]
  • wie bekommt man es hin, dass sich das feld anpasst??

    (es soll sich nach unten verlängern und die anderen spalten sollen das auch tun

    Einmal editiert, zuletzt von Stormrider (7. Mai 2010 um 16:32)

  • so komplieziert kann das doch nicht sein und exxel kann ich aus anderen gründen nicht nutzen. es stimmt das ich mich nicht mit diesem bereich von autoit auskenne denke aber, dass ich es hinbekomme auch wenn es länger dauert.(vorausgesetzt ihr helft mir)

  • Hi!

    @Stormrider

    Ein ausschnit aus ein Code von mir, nur mal um zu veranschaulichen was alles benötigt wir, es geht noch kürzer aber diesen code habe ich gerade gefunden.

    Spoiler anzeigen
    [autoit]

    #include <GuiListView.au3>
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)
    Opt('GUIOnEventMode', 1)

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

    Local $TabelleKopf = 'Bezeichnung|Wert', $schichtsetz = @ScriptDir & '\test.ini', $iEdit = -1
    Local $hLVH, $hListview

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

    Global $GUI5 = GUICreate('Schichtwerte', 163, 345, -1, -1, $WS_SIZEBOX)
    GUISetBkColor(0xFFFACD)
    GUISetOnEvent(-3, '_gui5exit')
    Dim $aEr[3], $in, $in1, $hLis, $hLVH, $hCM, $new, $Be, $Lo
    Dim $ae[3][2] = [['Neu Eintrag', 'LiSaEd'],['Bearbeiten', 'LiSaEd'],['Eintrag Löschen', 'LiSaEd']]
    Dim $OM1 = GUICtrlCreateMenu(' M&enü ')
    For $i = 0 To 2
    $aEr[$i] = GUICtrlCreateMenuItem($ae[$i][0], $OM1)
    GUICtrlSetOnEvent(-1, $ae[$i][1])
    Next
    $hListview = GUICtrlCreateListView($TabelleKopf, 1, 1, 159, 299)
    $hLVH = GUICtrlGetHandle($hListview)
    Dim $hCM = GUICtrlCreateContextMenu($hLis)
    Dim $new = GUICtrlCreateMenuItem('Neuer Eintrag', $hCM)
    GUICtrlSetOnEvent(-3, 'LiSaEd')
    Dim $Be = GUICtrlCreateMenuItem('Bearbeiten', $hCM)
    GUICtrlSetOnEvent(-3, 'LiSaEd')
    Dim $Lo = GUICtrlCreateMenuItem('Löschen', $hCM)
    GUICtrlSetOnEvent(-3, 'LiSaEd')
    GUISetState()

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

    Global $GUI6 = GUICreate('Setzen', 260, 140, -1, -1, $WS_SYSMENU)
    GUISetBkColor(0xFFFACD)
    GUISetOnEvent(-3, '_G6H')
    Dim $aH, $hCreate, $nesa
    $aH = StringSplit($TabelleKopf, '|')
    Dim $aNew[$aH[0]]
    For $i = 1 To $aH[0]
    GUICtrlCreateLabel($aH[$i], 4 + ($i - 1) * 125, 15, 110, 20)
    GUICtrlSetFont(-1, 8, 400, 0, 'Verdana')
    $aNew[$i - 1] = GUICtrlCreateInput('', 2 + ($i - 1) * 125, 30, 120, 20, Default, $WS_EX_STATICEDGE)
    GUICtrlSetFont(-1, 10, 600, 0, 'Verdana')
    Next
    $nesa = GUICtrlCreateButton('Eintrag speichern', 60, 65, 120, 25, $BS_DEFPUSHBUTTON)
    GUICtrlSetOnEvent(-1, 'LiSaEd')
    _GUICtrlListView_RegisterSortCallBack($hLVH)
    GUISetState(@SW_HIDE, $GUI6)

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

    Load()

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

    Func LiSaEd()
    Dim $sItem = ''
    If @GUI_CtrlId = $aEr[0] Or @GUI_CtrlId = $new Then
    $iEdit = -1
    Return GUISetState(@SW_SHOW, $GUI6)
    EndIf
    Switch @GUI_CtrlId
    Case $aEr[0], $new, $nesa
    For $i = 0 To UBound($aNew) - 1
    If $iEdit > -1 Then
    _GUICtrlListView_SetItemText($hLVH, $iEdit, GUICtrlRead($aNew[$i]), $i)
    Else
    $sItem &= GUICtrlRead($aNew[$i]) & '|'
    EndIf
    If GUICtrlRead($aNew[$i]) <> '' Then GUICtrlSetData($aNew[$i], '')
    Next
    If $iEdit > -1 Then
    $iEdit = -1
    _GUICtrlListView_SortItems($hLVH, GUICtrlGetState($hListview))
    _GUICtrlListView_SortItems($hLVH, GUICtrlGetState($hListview))
    Else
    If $sItem <> '|' Then
    GUICtrlSetState($aNew[0], $GUI_FOCUS)
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListview)
    _GUICtrlListView_SortItems($hLVH, GUICtrlGetState($hListview))
    _GUICtrlListView_SortItems($hLVH, GUICtrlGetState($hListview))
    EndIf
    EndIf
    Case $aEr[1], $Be
    GUISetState(@SW_SHOW, $GUI6)
    Dim $aItem
    $iEdit = _GUICtrlListView_GetSelectionMark($hLVH)
    If $iEdit > -1 Then
    $aItem = _GUICtrlListView_GetItemTextArray($hLVH, $iEdit)
    For $i = 1 To $aItem[0]
    GUICtrlSetData($aNew[$i - 1], $aItem[$i])
    Next
    EndIf
    Case $aEr[2], $Lo
    If MsgBox(292, 'Einträge löschen', 'Wollen sie die markierten Einträge wirklich löschen?') = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVH)
    EndSwitch
    EndFunc ;==>LiSaEd

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

    Func Load()
    Dim $hFile = IniReadSection($schichtsetz, 'Data')
    _GUICtrlListView_DeleteAllItems($hLVH)
    _GUICtrlListView_BeginUpdate($hLVH)
    For $i = 1 To UBound($hFile) - 1
    ConsoleWrite($hFile[$i][1]& @CRLF)
    GUICtrlCreateListViewItem(String($hFile[$i][1]), $hListview)
    Next
    _GUICtrlListView_EndUpdate($hLVH)
    EndFunc ;==>Load
    Func Save()
    Dim $file = FileOpen($schichtsetz, 2)
    FileClose($file)
    For $i = 0 To _GUICtrlListView_GetItemCount($hLVH) - 1
    IniWrite($schichtsetz, 'Data', '0' & $i + 1, _GUICtrlListView_GetItemTextString($hLVH, $i))
    Next
    EndFunc ;==>Save

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

    Func _gui5exit()
    Save()
    Exit
    EndFunc ;==>_gui5exi

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

    Func _G6H()
    GUISetState(@SW_HIDE, $GUI6)
    _GUICtrlListView_UnRegisterSortCallBack($hLVH)
    EndFunc ;==>_G6H

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

    While Sleep(10)
    WEnd

    [/autoit]

    Edit: Sorry war ein Fehler drin , Ist Behoben ! ;)

    LG KLeiner

    2 Mal editiert, zuletzt von kleiner27 (7. Mai 2010 um 18:53)

  • erstmal thx

    aber aus irgendeinem grund kann ich den script nicht öffnen

  • warum schließt sich der script immer wenn man "Eintrag hinzufügen" auswählt. aber das prinziep ist genau das was ich suche

  • Hast du auch die zweite Version genommen die ich gePostet habe und eine test.ini im selben Verzeichnis erstellt?

    Edit: Obwol das mit der .ini nicht wichtig ist den datei wird erstellt wenn der Code geschlossen wird.
    LG Kleiner

  • Habe gerade noch gesehen in zeile 107 u. 108, Brauchst du nicht kannst du löschen.

    Spoiler anzeigen
    [autoit]

    Dim $file = FileOpen($schichtsetz, 2)
    FileClose($file)

    [/autoit]

    LG Kleiner

  • hättest du evt auch noch eine idee wie ich es hinbekomme, dass sich die Zeile nach unten verlängert wenn der Text zu lang wird?? :thumbup:

  • Soweit mir bekannt ist es nicht möglich!
    Möglichkeit Form($GUI) vergrössern und mit :

    [autoit]

    _GUICtrlListView_SetColumnWidth('', '', $LVSCW_AUTOSIZE)

    [/autoit]


    anpassen!

    LG Kleiner

  • oder könnte man auch mit dem "einfügen" buton editboxen einfügen das würde mein problem auch lösen. weiß nur nit wie ich das per buton einfügen kann ?(

  • Ich würde dir empfehlen erst mal sich an die Hilfe zu setzen und sich selber weiter entwickel als nach einfachere Möglichkeiten umzuschauen.
    Zumal wie du selber sagst wenig Erfahrung hast.

    Fang mit was Kleinem an und arbeite dich schritt für Schritt weiter!

    Und zu deiner Frage ja das ist möglich aber dann alles auf Basis von editboxen wobei dann aber keine Tabelle mehr entsteht.

    LG Kleiner

  • ich glaube mit den editboxen krig ich das hin ich weiß allerdings nicht wie ich die editboxen astelle der listview einträge setzten soll.

    aber danke für deine mühe

    Einmal editiert, zuletzt von Stormrider (7. Mai 2010 um 23:09)

  • so habs :D :D und ihr meint das zu lernen dauert monate :rolleyes:

    aber nochma danke für eure hilfe