Hallo AutoIt-Freunde,
Folgendes Problem.
das script liest aus einer excel-datei daten in ein array mit ca. 50 000 zeilen a 13 spalten
In einer GUI gibt es
- 3 checkboxen
- 3 inputs
- 1 combo
eine listview in der zunächst alle daten der excel datei geschrieben werden.
man kann durch anklicken der einzellnen checkboxen und/oder eingabe in inputs und/oder auswählen in einer combo die liste filtern.
leider dauert meine lösung zu lange da so viele daten durchkemmt werden müssen.
gibt es hierzu eine schnellere / elegantere lösung?
zudem habe ich das problem, dass ich die listviewItems gerne dingfest machen möchte.
also bsw $ListViewItem[12] = GUICtrlCreateListViewItem(...)
ich möchte nach einer ausfilterung immer noch den bezug von der neuen listview zum array was den kompletten inhalt der excel-datein beinhaltet behalen.
ich hoffe ihr versteht mich.
wenn nicht bitte nachfragen.
hier mein beispiel wie es aktuell ist:
Spoiler anzeigen
; einlesen der excel-datei
$oExcel = _ExcelBookOpen(@ScriptDir & "\test.xls", 0, True)
$Array = _Excel_RangeRead($oExcel, Default, Default, Default, 1)
_ExcelBookClose($oExcel)
;.....
; schreibe daten in listview
For $i = 1 To UBound($Array) -1
GUICtrlCreateListViewItem($Array[$i][0]&"|"&$Array[$i][1]&"|"&$Array[$i][2]&"|"&$Array[$i][3]&"|"&$Array[$i][4]&"|"&$Array[$i][5]&"|"&$Array[$i][6], $ListView)
Next
;..... wenn eines dieser kritierien zutrifft dann..
If $filter_1 <> GUICtrlRead($checkbox1) Or $filter_2 <> GUICtrlRead($checkbox2) Or $filter_3 <> GUICtrlRead($checkbox3) Or GUICtrlRead($input1) <> $filter_4 Or GUICtrlRead($input2) <> $filter5 Or GUICtrlRead($input3) <> $filter6 Or GUICtrlRead($combo1) <> $filter7 Then
_GUICtrlListView_BeginUpdate($ListView)
$filter1 = GUICtrlRead($checkbox1)
$filter2 = GUICtrlRead($checkbox2)
$filter3 = GUICtrlRead($checkbox3)
$filter4 = GUICtrlRead($input1)
$filter5 = GUICtrlRead($input2)
$filter6 = GUICtrlRead($input3)
$filter7 = GUICtrlRead($combo1)
If GUICtrlRead($checkbox1) = $GUI_CHECKED Then
$checkbox1_data = "suchstring checkbox 1"
Else
$checkbox1_data = ""
EndIf
If GUICtrlRead($checkbox2) = $GUI_CHECKED Then
$checkbox2_data = "suchstring checkbox 2"
Else
$checkbox2_data = ""
EndIf
If GUICtrlRead($checkbox3) = $GUI_CHECKED Then
$checkbox3_data = "suchstring checkbox 3"
Else
$checkbox3_data = ""
EndIf
_GUICtrlListView_DeleteAllItems($ListView)
; ..schreibe ListeView mit selektierten Filtern
For $i = 1 To UBound($Array) - 1
If StringInStr($Array[$i][0], $checkbox1_data, 2) Or StringInStr($Array[$i][1], $checkbox2_data, 2) Or StringInStr($Array[$i][2], $checkbox3_data, 2) And (StringInStr($Array[$i][3], $filter4, 2) = 0 Or $filter4 = "") And (StringInStr($Array[$i][4], $filter5, 2) = 0 Or $filter5 = "") And (StringInStr($Array[$i][5], $filter6, 2) = 0 Or $filter6 = "") And (StringInStr($Array[$i][6], $filter7, 2) = 0 Or $filter7 = "") Then
GUICtrlCreateListViewItem($Array[$i][0]&"|"&$Array[$i][1]&"|"&$Array[$i][2]&"|"&$Array[$i][3]&"|"&$Array[$i][4]&"|"&$Array[$i][5]&"|"&$Array[$i][6], $ListView)
EndIf
Next
_GUICtrlListView_EndUpdate($ListView)
EndIf
MfG Inferior