Hallo
ich habe vor, ein neues kleines Programm zu schreiben, jedoch haben sich mir schon in der Planung einige Fragen aufgetan, welche ich teilweise selbst lösen konnte, andere wiederum nicht.
Das Programm soll eine Preisliste, welche sozusagen meine Datenbank ist, in eine ListView einlesen. Diese möchte ich später nach bestimmten Stichwörtern durchsuchen können, um direkt zum richtige Artikel zu gelangen. Diesen möchte ich dann durch das klicken eines Button auf eine 2te ListView übertragen, auf welcher ich die benötigten Artikel sammle. Wenn die Liste fertig ist, möchte ich diese in eine Exceldatei übertragen.
Hierbei habe ich folgende Probleme, die ich nicht selbst lösen kann:
1. Die Preisliste ist eine PDF-Datei. Kann ich von Dort Texte an einer bestimmten Stelle einlesen? Die Datei besitzt ~140 Seiten und es wäre daher sehr Zeitaufwenid diese beispielsweise manuell in ein anderes Format umzuwandeln.
2. Wie übertrage ich ein Listvieweintrag von einer zur anderen ListView?
3. Wie kann ich durch Eingabe eines Suchbegriffes in einer Inputbox direkt zum gewünschten Eintrag gelangen?
Progressbar/PDF/ListView
-
- [ offen ]
-
descent -
1. Mai 2010 um 15:36 -
Geschlossen -
Erledigt
-
-
Du kannst eine PDF auch als Textdokument öffnen ;). Nur sind dann ein paar kryptische Zeichenketten enthalten.
Außerdem solltest du dir die _GUICtrlListView_... Befehle anschauen. Damit kannst du Beispielsweise herausfinden, welcher Eintrag ausgewählt ist wenn du den Button klickst und dann einfach diesen Eintrag in ein 2tes ListView kopieren. -
D.h. wenn ich die PDF in eine Textdatei umwandle, dann kann ich eine Normale Textdatei als Datenbank nutzen? Wenn ja, vermute ich, dass die Textdatei dann als Array eingelesen wird. Muss dann jeder Eintrag in einer extra Zeile sein? Ich habe nämlich unterschiedliche Zeilen im Listview, in welche die Daten eingeordnet werden sollen. Wie soll ich das dann machen? Muss ich dies dann über Stringsplit aufteilen?
Habe mal kurz ein GUI erstellt um zu verdeutlichen, wie das ganze ungefähr aussehen soll.
Spoiler anzeigen
[autoit]#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.3.6.0
[/autoit] [autoit][/autoit] [autoit]
Author: myNameScript Function:
[/autoit] [autoit][/autoit] [autoit]
Template AutoIt script.#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]; Script Start - Add your code below here
[/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Form1", 730, 587, 170, 78)
$Tab1 = GUICtrlCreateTab(0, 8, 729, 577)
GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$TabSheet1 = GUICtrlCreateTabItem(" Preisliste ")
$ListView1 = GUICtrlCreateListView("Arikelnummer|Bezeichnung|Menge|Preis", 8, 88, 706, 486)
$Input1 = GUICtrlCreateInput("", 8, 48, 121, 21)
$Button1 = GUICtrlCreateButton("Suchen", 136, 46, 75, 25, 0)
$Button2 = GUICtrlCreateButton("Übertragen", 240, 46, 75, 25, 0)
$TabSheet2 = GUICtrlCreateTabItem(" Auswahl ")
$ListView2 = GUICtrlCreateListView("Arikelnummer|Bezeichnung|Menge|Preis", 8, 88, 706, 486)
$Button3 = GUICtrlCreateButton("Löschen", 8, 46, 75, 25, 0)
$Button4 = GUICtrlCreateButton("Liste >> Excel", 104, 46, 91, 25, 0)
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitEndSwitch
[/autoit]
WEnd -
Zitat
wenn ich die PDF in eine Textdatei umwandle
Wozu? Du kannst jedes beliebige Dateiformat als Text in AutoIt einlesen. -
Hallo descent,
zu
- schau dir Listview-Datenbank-Beispiel
Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <File.au3>;#include <array.au3>
[/autoit] [autoit][/autoit] [autoit]Local $tZeit, $s1, $s2
[/autoit] [autoit][/autoit] [autoit]$main = GUICreate("Test Drag & Drop from LV1 to LV2 DblClick in LV1 with ContextMenu in LV1 (copies to ClipBoard", 600, 400)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$listview = GUICtrlCreateListView("Gruppe1| BlubText", 10, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) ; legt fest, dass Hintergrundfarbe wechselt
GUICtrlSetBkColor(-1, 0xE6E6FA) ; Hintergrundfarbe 1$listview2 = GUICtrlCreateListView("Gruppe2 | BlubText", 230, 10, 200, 100, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $WS_EX_CLIENTEDGE))
[/autoit] [autoit][/autoit] [autoit]
GUICtrlSetState($listview2, $GUI_DROPACCEPTED)
$hbtnInfo = GUICtrlCreateButton("Info", 10, 120, 100, 20)
$hbtnSave = GUICtrlCreateButton("&Speichern", 230, 120, 100, 20)
$hbtnLoad = GUICtrlCreateButton("&Laden", 230, 150, 100, 20)For $i = 1 To 9
[/autoit] [autoit][/autoit] [autoit]
$listitem = GUICtrlCreateListViewItem("test" & $i & " |Blub " & Random(1, 9), $listview)
if $i=5 Then GUICtrlSetFont($listitem,14,800)
GUICtrlSetBkColor(-1, 0xcccccc) ; Hintergrundfarbe 2
Next
$idContextmenu = GUICtrlCreateContextMenu($listview)
$idClipmenu = GUICtrlCreateMenuItem("Selektierte ins ClipBoard", $idContextmenu)
$idAllClipmenu = GUICtrlCreateMenuItem("Alle aus Splate 2 ins ClipBoard", $idContextmenu)
$idDragmenu = GUICtrlCreateMenuItem("In LV 2", $idContextmenu)GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") ;<=========================================== Bemachrichtigung Doppelklick
[/autoit] [autoit][/autoit] [autoit]
GUISetState()
$first = True
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_DROPPED, $idDragmenu
$ar = _GUICtrlListView_GetSelectedIndices($listview, True)
;_ArrayDisplay($ar)
For $i = 1 To $ar[0]
$sItem = _GUICtrlListView_GetItemTextString($listview, $ar[$i])
GUICtrlCreateListViewItem($sItem, $listview2)
Next
Case $hbtnInfo
$Wert = _GUICtrlListView_GetItemTextArray($listview)
If $Wert[2] <> "" Then
MsgBox(0, "Eintrag für " & $Wert[1], "ist: " & $Wert[2])
Else
MsgBox(0, "", "Kein Eintrag ausgewählt")
EndIf
Case $hbtnSave
SaveLV(@ScriptDir & "\LV2.DAT")
Case $hbtnLoad
LoadLV(@ScriptDir & "\LV2.DAT")
Case $idClipmenu
$aItems = _GUICtrlListView_GetSelectedIndices($listview, True)
$sItemText = ""
For $i = 1 To $aItems[0]
;Schleifenbeginn 1 da $aItem[0] die Anzahl enhält
$sItemText &= _GUICtrlListView_GetItemTextString($listview, $aItems[$i]) & @CRLF
ConsoleWrite($sItemText & @CRLF)
Next ;= > weiter mit For
;ClipPut($sItemText & @CRLF)
Case $idAllClipmenu
$sToClip = ""
For $i = 0 To _GUICtrlListView_GetItemCount($listview)
$aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
$sToClip &= $aItem[2] & @CRLF
Next
ClipPut($sToClip)
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEndFunc SaveLV($sFile)
[/autoit] [autoit][/autoit] [autoit]
Local $hFileOut, $aItem
$hFileOut = FileOpen($sFile, 2)
For $j = 0 To _GUICtrlListView_GetItemCount($listview2) - 1
$aItem = _GUICtrlListView_GetItemTextString($listview2, $j)
FileWriteLine($hFileOut, $aItem)
Next
FileClose($hFileOut)
EndFunc ;==>SaveLVFunc LoadLV($sFile)
[/autoit] [autoit][/autoit] [autoit]
Local $aItems
If FileExists($sFile) Then
_FileReadToArray($sFile, $aItems)
If IsArray($aItems) Then
_GUICtrlListView_DeleteAllItems($listview2)
;_ArrayDisplay($aItems)
For $j = 1 To $aItems[0]
GUICtrlCreateListViewItem($aItems[$j], $listview2)
Next
EndIf
EndIf
EndFunc ;==>LoadLVFunc WM_NOTIFY($hWnd, $MsgID, $wParam, $lParam) ;<================== Benachrichtigung Doppelklick (Original from Chaoskeks [in ChaosExecution])
[/autoit]
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return 0
$code = DllStructGetData($tagNMHDR, 3)
If $wParam = $listview Then
;ConsoleWrite($code & @CRLF)
Switch $code
Case -3
If _GUICtrlListView_GetSelectedCount($listview) > 0 Then
For $i = 0 To _GUICtrlListView_GetItemCount($listview)
If _GUICtrlListView_GetItemSelected($listview, $i) Then
$aItem = _GUICtrlListView_GetItemTextArray($listview, $i)
MsgBox(0, "Doppel-Klick auf ", $aItem[1] & @CRLF & @CRLF & $aItem[2])
EndIf
Next
EndIf
EndSwitch
EndIf
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_NOTIFY- schau dir die Hilfe zu[autoit]_GUICtrlListView_FindText[/autoit] an
Du könntest dir auch überlegen, das ganze mit SQLite zu realisieren,
mfg (Auto)Bert
-
Ok danke, werd mir das gleich mal anschauen.
Das mit SQL habe ich mir auch schon überlegt. Habe hier nur das Problem das ich nicht weiß wie ich alle Einträge von der PDF bzw wenn ich es umwandel der Textdatei ind die SQL -DAtenbank übertragen soll.