Bilddatei
NCID Anrufmonitor
-
JaneDoe -
11. Oktober 2012 um 18:23
-
-
Mit meinem ersten Beitrag war wohl etwas schief gelaufen. Bis auf die Bilddatei ist nichts im Forum zu finden. Hier noch einmal.
[autoit]
Ich bin vor 4 Tagen bei der Lösung meiner Probleme (EasyBox) auf dieses Forum gestoßen und war von dem Code von JaneDoe begeistert. Bislang hatte ich noch nichts von Autoit gehört, habe aber ein wenig Erfahrung mit VBA Excel. Autoit habe ich mir runtergeladen und dazu den Code von JaneDoe (Danke! ). Diesen habe ich umgeschrieben, so dass die Daten jetzt in eine Exceltabelle geschrieben werden. Excel erledigt dann die weiteren Aufgaben (entfernen doppelter Sätze, formatieren, zuordnen des Namens etc. Bei Bedarf bin ich gerne Bereit, das Workbook zur Verfügung zu stellen.
Hier der geänderte Code:#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
[/autoit][autoit][/autoit][autoit]
#AutoIt3Wrapper_Res_SaveSource=y
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "Inet.au3"
#include "Array.au3"
#include "Excel.au3";####################################################################
[/autoit][autoit][/autoit][autoit]
; Anruflisten auslesen für Router Model:
; EasyBox 803 A (und vermutlich andere...)
; | By JaneDoe
;####################################################################
; 26.10.2012 | geändert um Excel-Datei zu füllen | Georg Häusler
;####################################################################Global $EB_IP ="192.168.2.1" ; router ip
[/autoit][autoit][/autoit][autoit]
Global $EB_Username ="root" ; standart ist: root
Global $EB_Passwort ="123456" ; standart ist: 123456
Global $ArrayIncoming,$ArrayOutgoing,$EB_Anrufliste,$EB_Start,$Error_CheckDIM $sFilePath_01 ; Excelpfadvariable
[/autoit][autoit][/autoit][autoit]
Dim $Reihe, $SpalteDatum, $SpaltePhone, $SpalteDauer ; Excelvariablen$sFilePath_01 = "Pfad und Dateiname eintragen" ; Excelpfad und Dateiname eintragen
[/autoit][autoit][/autoit][autoit]
$oExcel_01 = _ExcelBookOpen($sFilePath_01)
If @error = 1 Then
MsgBox(0, "Fehler!", "Das Excel-Objekt konnte nicht erstellt werden")
Exit
ElseIf @error = 2 Then
MsgBox(0, "Fehler!", "Die Datei existiert nicht!")
Exit
EndIf_ExcelSheetActivate($oExcel_01, 2)
[/autoit][autoit][/autoit][autoit]$Error_Check = _EB_GetAnrufliste()
[/autoit][autoit][/autoit][autoit]_ExcelBookClose($oExcel_01,1,0)
[/autoit][autoit][/autoit][autoit];If ubound($ArrayIncoming)<>0 then _ArrayDisplay($ArrayIncoming,"Eingehende Anrufe")
[/autoit][autoit][/autoit][autoit];If ubound($ArrayOutgoing)<>0 then _ArrayDisplay($ArrayOutgoing,"Ausgehende Anrufe")
[/autoit][autoit][/autoit][autoit]exit
[/autoit][autoit][/autoit][autoit];###############################################
[/autoit][autoit][/autoit][autoit]
; Routerlogin und Anrufliste auslesen
;###############################################
Func _EB_GetAnrufliste()
$Error_Check = "None"
Local $EB_Strip,$EB_Eintraege
Local $EB_Login = _INetGetSource("http://" &$EB_IP& "/cgi-bin/login.exe?user=" &$EB_Username& "&pws=" &$EB_Passwort)
if Stringlen($EB_Login)=0 then
$Error_Check = "Fehler: Bitte Zugangsdaten überprüfen" ; falsche zugangsdaten
Else
$EB_Strip = StringInStr($EB_Login, 'Login gescheitert.')
if $EB_Strip < 0 then ; gefunden = nicht eingelogt
$Error_Check = "Fehler: Keine Einträge in der Anruferliste." ; fehler...
else ; eingelogt
$EB_Anrufliste = _INetGetSource("http://" &$EB_IP& "/voip_status.stm")
if Stringlen($EB_Anrufliste)=0 then
$Error_Check = "Fehler: Konnte Anruferliste nicht öffnen." ; fehler...
Else
$EB_Start = StringInStr($EB_Anrufliste, 'voip_i_Phone[0]') ; lade anrufer
if $EB_Start = 0 then ; nichts gefunden
$Error_Check = "Keine Einträge in der Anruferliste gefunden." ; fehler...
else ; sortiere anrufer...
$Reihe = 1
$SpalteDatum = 1 ; Exceleinträge eingehende Anrufe
$SpaltePhone = 3 ; Exceleinträge eingehende Anrufe
$SpalteDauer = 4 ; Exceleinträge eingehende Anrufe
$ArrayIncoming=_SortAnrufer("i")
endif
;########
$EB_Start = StringInStr($EB_Anrufliste, 'voip_o_Phone[0]') ; lade anrufe
if $EB_Start = 0 then ; nichts gefunden
$Error_Check = "Keine Einträge in der Anrufliste gefunden." ; fehler...
else ; sortiere anrufe...
$Reihe = 1
$SpalteDatum = 7 ; Exceleinträge ausgehende Anrufe
$SpaltePhone = 9 ; Exceleinträge ausgehende Anrufe
$SpalteDauer = 10 ; Exceleinträge ausgehende Anrufe$ArrayOutgoing=_SortAnrufer("o")
[/autoit][autoit][/autoit][autoit]
endif
endif
endif
endifReturn $Error_Check
[/autoit][autoit][/autoit][autoit]
EndFunc
;###############################################
; Anruflisten sortieren in Nr.Datum.Dauer
;###############################################
Func _SortAnrufer($EB_Sort)
Dim $EB_Array
Local $EB_ResultArray[1][3], $EB_Lenght, $EB_End, $EB_GetStr
Local $ArSize=0, $ArRegEx, $EB_Anrufer, $EB_Date, $EB_Lenght
$EB_End = StringInStr($EB_Anrufliste, 'var '&$EB_Sort&'_count=') ; ende der einträge finden
$EB_GetStr = $EB_End-$EB_Start ; zeichen berechenen zum ausschneiden
$EB_Eintraege = StringMid($EB_Anrufliste, $EB_Start, $EB_GetStr) ; telefonliste ausschneiden
$EB_Array = StringSplit($EB_Eintraege, @CRLF) ; telefonliste in array splittenFor $i = 1 To UBound($EB_Array)-1 ; jeden eintrag abklappern...
[/autoit][autoit][/autoit][autoit]
; voip_i_Phone[x] = 'suchtext';
$ArRegEx = StringRegExp($EB_Array[$i], "(?i)voip_" & $EB_Sort & "_Phone([^;]*)", 1) ; 1 regex
if not @Error then $ArRegEx = StringRegExp($ArRegEx[0], "(?i)'([^']*)", 1) ; 2 regex...profi kann da sicher 1 regex machen
if not @Error then $EB_Anrufer = $ArRegEx[0]; voip_i_Date[x] = 'suchtext';
[/autoit][autoit][/autoit][autoit]
$ArRegEx = StringRegExp($EB_Array[$i], "(?i)voip_" & $EB_Sort & "_Date([^;]*)", 1) ; 1 regex
if not @Error then $ArRegEx = StringRegExp($ArRegEx[0], "(?i)'([^']*)", 1) ; 2 regex...profi kann da sicher 1 regex machen
if not @Error then $EB_Date= $ArRegEx[0]; voip_i_Keep[x] = 'suchtext';
[/autoit][autoit][/autoit][autoit]
$ArRegEx = StringRegExp($EB_Array[$i], "(?i)voip_"&$EB_Sort&"_Keep([^;]*)", 1) ; 1 regex
if not @Error then $ArRegEx = StringRegExp($ArRegEx[0], "(?i)'([^']*)", 1) ; 2 regex...profi kann da sicher 1 regex machen
if not @Error then
$EB_Lenght = $ArRegEx[0]ReDim $EB_ResultArray[$ArSize+1][3] ; neuer eintrag mit gefundenen daten...
[/autoit][autoit][/autoit][autoit]
$EB_ResultArray[$ArSize][0]= $EB_Anrufer ; anrufer nummer
$EB_ResultArray[$ArSize][1]= $EB_Date ; anrufer datum und zeit
$EB_ResultArray[$ArSize][2]= $EB_Lenght ; anruf dauer oder 00:00:00 = anruf verpasst
$ArSize+=1_ExcelWriteCell($oExcel_01, $EB_Lenght, $Reihe , $SpalteDauer)
[/autoit][autoit][/autoit][autoit]
_ExcelWriteCell($oExcel_01, $EB_Date, $Reihe , $SpalteDatum)
_ExcelWriteCell($oExcel_01, $EB_Anrufer, $Reihe , $SpaltePhone)
$Reihe = $Reihe + 1endif
[/autoit]
next
Return $EB_ResultArray
EndFuncDas das so gut geklappt hat, war eine schöne Erfahrung. Demnächst möchte ich mich mit dem GUI beschäftigen.
Im Moment habe ich aber ein anderes Problem und bitte da um Hilfe.
Wie stelle ich im Programm fest, ob eine EXCEL-Datei geöffnet ist, und wie spreche ich dann diese Datei an, so dass ich meine Daten dort abladen kann.
Vielen Dank im Voraus
Fernando -
- Offizieller Beitrag
Wie stelle ich im Programm fest, ob eine EXCEL-Datei geöffnet ist, und wie spreche ich dann diese Datei an, so dass ich meine Daten dort abladen kann.
Bitte dazu nicht diesen Thread hijacken - ist ein anderes Thema. Eröffne dazu einen eigenen Thread in "Hilfe und Unterstützung". -
Hi Bugfix, kein Problem, ich bewege mich zum ersten mal registriert in einem Forum und bin noch nicht so ganz mit der Materie vertraut. Werde mich bessern. Habe nach langem Suchen auch schon die Antwort für mein Problem gefunden.
-