Guten Tag liebe Autoit Gemeinde,
ich bin auf folgendes Problem gestoßen, vielleicht stand schon jemand von euch vor dem selben Problem.
Das Programm sucht aus einer Exceltabelle (aktuell 8100 Zeilen lang und 4 Breit Bereich A1:D8100)
In der ersten Spalte steht die ID, der Bereich in dem gesucht wird lautet A1:A10000 (Nicht A8100 weil die Tabelle pro Woche um 150-300 Zeilen länger wird)
$idLPN_NR = Zu Suchender String - ca 14 chars lang +/- 3
Local $aResult = _Excel_RangeFind($oWorkbook, $idLPN_NR,"A1:A10000",$xlValues)
Ich benötige die Information z.B
A10
A1796
A:242
Eine ID kann mehrfach in dieser Exceltabelle vorhanden sein!
Daraus mache ich
A10:D10
A1796:D1796
A3242:D3242
Um mir die benötigten Informationen anzeigen zu lassen. Das geht super schnell.
Das dauert aktuell leider 7 Sekunden, ich benötige das aber in unter 1 Sekunde
Hat jemand eine Idee wie das schneller gehen könnte?
Ich liebäugle gerade mit ClipPut und ClipGet mit StringCompare was zu basteln....
Ich verwende die Excel.au3 der AutoIt Version : 3.3.15.0 mit zwei Anpassungen
$aResult[$iIndex][1] =$oMatch.Name.Name
Macht folgenden Fehler
\AutoIt3\Include\Excel.au3" (656) : ==> The requested action with this object has failed.:
Geändert in -> $aResult[$iIndex][1] = 0;$oMatch.Name.Name
$aResult[$iIndex][5] = $oMatch.Comment.Text
Macht folgenden Fehler
\AutoIt3\Include\Excel.au3" (660) : ==> The requested action with this object has failed.:
Geändert in -> $aResult[$iIndex][5] = 0;$oMatch.Comment.Text
Func _Excel_RangeFind($oWorkbook, $sSearch, $vRange = Default, $iLookIn = Default, $iLookAt = Default, $bMatchcase = Default)
If Not IsObj($oWorkbook) Or ObjName($oWorkbook, 1) <> "_Workbook" Then Return SetError(1, 0, 0)
If StringStripWS($sSearch, 3) = "" Then Return SetError(2, 0, 0)
If $iLookIn = Default Then $iLookIn = $xlValues
If $iLookAt = Default Then $iLookAt = $xlPart
If $bMatchcase = Default Then $bMatchcase = False
Local $oMatch, $sFirst = "", $bSearchWorkbook = False, $oSheet
If $vRange = Default Then
$bSearchWorkbook = True
$oSheet = $oWorkbook.Sheets(1)
$vRange = $oSheet.UsedRange
ElseIf IsString($vRange) Then
$vRange = $oWorkbook.Activesheet.Range($vRange)
If @error Then Return SetError(3, @error, 0)
EndIf
Local $aResult[100][6], $iIndex = 0, $iIndexSheets = 1
While 1
$oMatch = $vRange.Find($sSearch, Default, $iLookIn, $iLookAt, Default, Default, $bMatchcase)
If @error Then Return SetError(4, @error, 0)
If IsObj($oMatch) Then
$sFirst = $oMatch.Address
While 1
$aResult[$iIndex][0] = $oMatch.Worksheet.Name
$aResult[$iIndex][1] = 0;$oMatch.Name.Name
$aResult[$iIndex][2] = $oMatch.Address
$aResult[$iIndex][3] = $oMatch.Value
$aResult[$iIndex][4] = $oMatch.Formula
$aResult[$iIndex][5] = 0;$oMatch.Comment.Text
$iIndex = $iIndex + 1
If Mod($iIndex, 100) = 0 Then ReDim $aResult[UBound($aResult, 1) + 100][6]
$oMatch = $vRange.Findnext($oMatch)
If Not IsObj($oMatch) Or $sFirst = $oMatch.Address Then ExitLoop
WEnd
EndIf
If Not $bSearchWorkbook Then ExitLoop
$iIndexSheets = $iIndexSheets + 1
$sFirst = ""
$oSheet = $oWorkbook.Sheets($iIndexSheets)
If @error Then ExitLoop
$vRange = $oSheet.UsedRange
WEnd
ReDim $aResult[$iIndex][6]
Return $aResult
EndFunc ;==>_Excel_RangeFind
Alles anzeigen