water
Danke für die schnelle Antwort,
Auf Grund der schnellen und guten Antworten, die ich hier im Forum bekommen habe, macht es immer mehr Freude mit AutoIt zu arbeiten.
Es begann mit einem Programm um die Easy.Box auszulesen, das ich nur für meine Zwecke anpassen musste, ging dann weiter um einen Feiertagskalender, den ich mal in EXCEL geschrieben hatte in AutoIt umzusetzen, dann Telefon rückwärts, so dass ich mir die Werbung einspare, und jetzt habe ich ein Programm fertig, mit dem ich meine 100 Artikel bei Amazon verwalte und mir täglich die neuen Preise für diese Artikel in eine EXCEL-Tabelle schreiben lasse. In der Zwischenzeit war ich sogar in der Lage anderen zu helfen .
Beiträge von Fernando
-
-
Hallo qwert23,
Danke für die weiteren Beispiele.
Wenn ich das sehe, kann ich dann davon ausgehen, dass ich allen VB-Befehlen ein "$oExcel." voraussetzen kann, damit sie im EXCEL umgesetzt werden? Das wäre genial. -
Hallo water,
habe gerade die Lösung gefunden und zwar unter der Beschreibung von Funktion ObjGet.
$oExcel.ActiveWorkBook.ActiveSheet.Cells($Zeile,$Spalte).activate.
Hatte Dich vermutlich falsch verstanden.Gruß
Fernando -
Hallo water,
Danke für die Antwort, es geht aber nicht um VB-Befehle, sondern um einen Befehl aus AutoIt heraus.
Mit den Befehlen von AutoIt die ich kenne, kann ich zwar sagen, welche Zelle beschrieben werden soll, aber nicht, welche sichtbar markiert ist.
Mir geht es dabei um folgende 2 Punkte:
1. Ich möchte nach dem Schreiben der Tabelle, dass die aktivierte Zelle zum Beispiel die "A1" ist.
2. Dass ich während dem Überschreiben einer vorhandenen Tabelle sehe, an welcher Stelle gerade die Daten überschrieben werden.Ich würde mich über einen guten Vorschlag freuen.
Die letzte Möglichkeit, die ich aber nicht gut finde, wäre, dass ich jedes mal ein Makro starte, das diese Zelle aktiviert.Gruß
Fernando -
Ich habe folgendes Problem:
Ich möchte nachdem ich mit AutoIt eine Tabelle beschrieben habe als letztes eine bestimmte Zelle aktivieren.
Etwas wie:
Range("A1").activate
Ich habe da leider nichts gefunden. Kann mir jemand einen Tipp geben? -
Hier die Datenblöcke, wie sie auf der EasyBox pro Gespräch gespeichert sind.
Script Daten der eingehenden Gespräche:
von diesen werden in meinem Programm nur voip_i_Phone, voip_i_Date und voip_i_Keep genutzt.Script Daten der ausgehenden Gespräche:
von diesen werden in meinem Programm nur voip_o_Phone, voip_o_Date und voip_o_Keep genutzt.
Unter welcher Bezeichnung sich LINE*label befindet kann ich nur vermuten ( voip_i_AC und voip_o_AC) -
Ich bin mir nicht sicher, ob ich Dir helfen kann, da die Frage auf die technische Seite zielt. Ich selber habe einen LTE-Anschluß.
Voraussetzung, dass die Daten übernommen werden können ist, dass auf der EasyBox unter Extras --> NCID die Häkchen gesetzt sind.
dann werden die Gespräche auch unter Sprache --> Status eingetragenDiese dort eingetragenen Daten werden von mir ausgelesen und archiviert.
Es sollte auch bei einem ISDN-Anschluss so funktionieren. -
Hallo Katrijn, Hallo water,
danke für die Mitteilungen.
Katrijn Dass die 2 anderen Situationen auftreten können, ist mir klar. Für meine Anwendung aber nicht zu erwarten, da das "nur" auf einem Einzelplatz stattfindet. Für andere Anwendungen aber immer zu bedenken. Danke für den Hinweis.water Danke für die Mitteilung, Bin ab morgen, bis Weihnachten leider stark privat eingespannt. Ich werde mir AutoIt 3.3.9.2, falls ich es noch nicht habe, dan runterladen und anschlißend das neue UDF testen. (Hoffe, dass mein Schulenglisch reicht.)
Liebe Grüße und ein frohes Weihnachtsfest incl. Neuem Jahr
Fernando
-
Hallo water,
danke für die Antwort.
Ich habe schon dem Vorschlag von TheLuBu augetestet. Das hat geklappt.Vielen Dank
Fernando -
Hallo TheLuBu,
vielen Dank für die schnelle Antwort.
Ich habe es schon ausgetestet. Es klappt hervorragend.Gruß
Fernando -
Hauptproblem gelöst
-
Für alle, die noch mit EXCEL 2003 arbeiten ist im Anhang eine Zip-Datei, mit dem Compilierten Programm und der EXCEL 2003 Datei.
Seit März 2013 habe ich nun eine EasyBox 904 LTE. Auch hier funktioniert das Programm (beide Ausführungen).
-
Seit 4 Wochen bin ich nach Wechsel meines Internetanbieters Besitzer einer EasyBox 800 a.
Ich musste leider feststellen, dass Die Möglichkeiten der Datenübernahme sehr gering sind (cut and paste).Ich fand dann hier im Forum einen Beitrag, der sich mit diesem Problem beschäftigt (NCID Anrufmonitor). Das hat mich dazu veranlasste mich mit Autoit zu beschäftigen. Meinen Dank an den Autor.
Daraus ist nun ein Programm geworden, dass die Telefondaten in eine Excel-Datei übernimmt. Die Daten werden getrennt nach eingehenden und ausgehenden Verbindungen aufgeführt. Neu hinzugekommene Telefonnummern werden in einem dritten Block aufgeführt. Wenn man hier den Teilnehmer hinzufügt, hat man bald ein gutes Telefonbuch. Hier als Beispiel:
]
Und hier dann der Autoit-CodeSpoiler anzeigen
C
Alles anzeigen#include "Inet.au3" #include "Array.au3" #include <file.au3> #include "Excel.au3" ;#################################################################### ; 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 | By Fernando ; mit freundlicher Unterstützung von BugFix und water ;#################################################################### ;Bitte die IP-Adresse, den Usernamen und das Passwort überprüfen. Hier sind die Standardeinstellungen eingetragen Local $EB_IP ="192.168.2.1" ; router ip Local $EB_Username ="root" ; standart ist: root Local $EB_Passwort ="123456" ; standart ist: 123456 Local $ArrayIncoming,$ArrayOutgoing,$EB_Anrufliste,$EB_Start,$Error_Check,$iNumCells_i,$iNumCells_o,$flag Local $myPath ; Excelpfadvariable Local $Reihe, $SpalteDatum, $SpaltePhone, $SpalteDauer, $sFormat_01,$sFormat_02, $sFormat_03 ; Excelvariablen $myPath = "C:\Hier Pfad der EXCEL-Datei eintragen\Gespräche.xlsm ; Dateiname eintragen Local $fOpen = False, $oBook, $oExcel = ObjGet('', 'Excel.Application') ; Zugriff auf geöffnetes Excel If @error Then _OpenXLS(0) ; == Excel ist nicht geöffnet, neues Excel-Objekt erstellen $fOpen = True Else ; == in Excel geöffnete Workbooks auflisten $oBook = $oExcel.WorkBooks ; == in Excel geöffnete Workbooks auflisten For $book In $oBook If $book.Path & '\' & $book.Name = $myPath Then ; ConsoleWrite($book.Path & '\' & $book.Name & @CRLF) $oBook($book.Name).Activate $fOpen = True $oExcel.Visible = 1 ; nur wenn Tabelle sichtbar sein soll $book.Sheets(1).Select() ExitLoop EndIf Next EndIf If Not $fOpen Then _OpenXLS($oExcel) $sFormat_01 = "[$-F400]h:mm:ss AM/PM" $sFormat_02 = "TT.MM.JJJJ hh:mm:ss" $sFormat_03 = "@" $oExcel.Visible = 1 _ExcelSheetActivate($oExcel, 1) $Error_Check = _EB_GetAnrufliste() ; Funktion Daten holen $iReiheEnde_1 = _ExcelReadCell($oExcel, 3, 13)+4 $iReiheEnde_2 = _ExcelReadCell($oExcel, 3, 14)+4 _ExcelNumberFormat($oExcel, $sFormat_01, 4, 3, $iReiheEnde_1, 3) _ExcelNumberFormat($oExcel, $sFormat_02, 4, 1, $iReiheEnde_1, 1) _ExcelNumberFormat($oExcel, $sFormat_01, 4, 8, $iReiheEnde_2, 8) _ExcelNumberFormat($oExcel, $sFormat_02, 4, 6, $iReiheEnde_2, 6) $sHorizAlign = "right" _ExcelHorizontalAlignSet($oExcel, 4, 2, $iReiheEnde_1, 2, $sHorizAlign) _ExcelHorizontalAlignSet($oExcel, 4, 7, $iReiheEnde_1, 7, $sHorizAlign) $oExcel.Application.Run("Finish") $sFlag = MsgBox(4, "Excel Ende", "Soll Excel geschlossen werden?") If $sFlag = 6 then _ExcelBookClose($oExcel,1,1) EndIf exit ;############################################### ; 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 = _ExcelReadCell($oExcel, 3, 13)+4 $SpalteDatum = 1 ; Exceleinträge eingehende Anrufe $SpaltePhone = 2 ; Exceleinträge eingehende Anrufe $SpalteDauer = 3 ; 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 = _ExcelReadCell($oExcel, 3, 14)+4 $SpalteDatum = 6 ; Exceleinträge ausgehende Anrufe $SpaltePhone = 7 ; Exceleinträge ausgehende Anrufe $SpalteDauer = 8 ; Exceleinträge ausgehende Anrufe $ArrayOutgoing=_SortAnrufer("o") endif endif endif endif Return $Error_Check 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 splitten For $i = 1 To UBound($EB_Array)-1 ; jeden eintrag abklappern... ; 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'; $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'; $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... $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 $EB_Date = StringReplace($EB_Date, "/", " ") _ExcelWriteCell($oExcel, $EB_Lenght, $Reihe , $SpalteDauer) _ExcelWriteCell($oExcel, $EB_Date, $Reihe , $SpalteDatum) _ExcelWriteCell($oExcel, "'" & $EB_Anrufer, $Reihe , $SpaltePhone) ; "'" da NumberFormat nicht übernommen wird und die führende Null sonst wegfällt. $Reihe+=1 endif next Return $EB_ResultArray EndFunc Func _OpenXLS($_oExcel) If Not IsObj($_oExcel) Then $oExcel = ObjCreate("Excel.Application") ; Excel-Objekt erstellen $oExcel.Visible = 1 ; 0=unsichtbar/ 1=sichtbar $oBook = $oExcel.Workbooks.Open($myPath) ; Datei öffnen $oBook.Sheets(1).Select() EndFunc
Im Anhang dann noch die EXCEL-Tabelle als Zip-Datei.
Was ist zu tun?
Die ZipDatei dekomprimieren, Die Datei abspeichern.
Den Autoit-code übernehmen, den Pfad der Exceldatei einsetzen, compilieren und hoffentlich Freude haben. -
EXCEL 2007 und da ich erst seit gut einer Woche Autoit kenne, natürlich den letzten Stand. 3.3.8.1
ist schon seltsam. Da ich vermute, dass das auch mit der Ländereinstellung etwas zu tun hat, Windows 7.Was muss ich einstellen, dass ich Antworten die auf meine Anfragen kommen, schneller mit bekomme?
-
-
Habe jetzt eine Übersetzungskarte gefunden
siehe Anhanghier ist zu sehen, dass das "-" Zeichen existiert.
(wüsste gerne, wie man ein Bild direkt hier einfügt. Direkt einfügen ist zu groß?)
-
Fernando: Wenn -4 schon als 2 Zeichen gewertet werden, wieso steht auf Wikipedia folgendes:
Ziffern 0 bis 9 mit Vorzeichen: negative Zahlen wurden zusätzlich zur Lochung 0–9 mit Überlochung in der 11er Zone der letzten Ziffernspalte codiert; positive Zahlen wurden in manchen Fällen mit 12er Überlochung dargestellt, in der Regel jedoch ohne Überlochung als neutrale Zahl.@Make-Grafik: Ich will mich da nicht festlegen, hatte 1979 ausser einer kleinen Einführung in das Thema keine weiteren Berührungen mit den Lochkarten. Wir hatten da in der Firma noch einen Lochsaal. Der wurde kurze Zeit später aber dicht gemacht. Habe mir jetzt den Artikel von Wiki angesehen. Ist mir ein wenig seltsam, den die Kisten hätten dann ja schon eine gewisse Intelligenz haben müssen um zu sehen, dass es sich inhaltlich um eine "-4" oder um ein "M" handelt. Ich habe damals mitgenommen, dass in jeder Spalte ein Zeichen ist.
-
Hallo water,
Danke für den Tipp und die Mühe
Jetzt klappt es. Nachdem ich das Format von "dd/mm/yyyy hh:mm:ss" auf "TT/MM/JJJJ ss:mm:ss" umgestellt habe,
Verstehen kann ich es aber nur teilweise. Die Änderung im Autoit-Code kann ich noch nachvollziehen.Ich habe aber auch den Test gemacht und über Autoit ein Excel-Makro gestartet um die Formatierung zu erreichen.
$oExcel_01.Application.Run("test")
Ich würde an dieser Stelle annehmen, dass hier die Steuerung an EXCEL-VB abgegeben wird. Somit wäre innerhalb des Excel-Makros auch der Formatierungsausdruck "dd/mm/yyyy hh:mm:ss" richtig. Aber auch im VB musste ich den Code auf "TT/MM/JJJJ ss:mm:ss" ändern, damit der Fehler beseitigt ist.Das würde bedeuten, dass jede Länderänderung auf dem Rechner zu Fehlern führen kann. Die Länderänderung ist zwar nicht die Regel, kann aber vorkommen.
Wenn ich das bei Excel VB sehe, dann scheint dass dort so geregelt zu sein, dass die Codierung einheitlich ist, dann aber über die Ländereinstellung eine Übersetzung erfolgt. (So stelle ich mir das vor )
-
Hallo funkey,
habe mir den Link angeschaut. Leider ist meine letzte Englischstunde schon 45 Jahre her.
Was ich glaube verstanden zu haben ist, dass es wohl länderspezifische Probleme mit der Formatierung gibt.
Speziell mein Problem war zwar nicht genannt, könnte aber mit hineingehören.
Jetzt habe ich versucht, das so zu lösen, dass ich die Formatierung direkt über ein Makro mache.
In Excel aufgerufen, ist das alles bestens. Ist auch schon tausendfach von mir gemacht worden.
Starte ich aber das Makro über Autoit, dann habe ich das gleiche Problem. Eine Formatierung der Uhrzeit klappt bestens,
Aber das Datumsformat wie in meinem Autoit-Beispiel in der Form "DD.MM.JJJJ hh:mm:ss" läuft auf den Hammer.
Gibt es da noch Hoffnung? -