Hallo,
nachdem ich auch von euch profitiere, möchte ich euch eines meiner Werke zeigen.
Es handelt sich dabei um einen Telefonbuchkonverter der seine Daten aus dem Microsoft CRM 4.0 in eine Telefonanlage von Aastra Detewe (X320) kopiert.
Ziel ist es Ansprechpartner (Name, Firma, Telefon) aus dem CRM zu exportieren und in das Telefonbuch der TK zu importieren.
Sicherlich an vielen Stellen Quick&Dirty Hack, aber vielleicht bringt es ja anderen was.
Ich freue mich über Feedback.
Gruß Cornelius
Spoiler anzeigen
#comments-start
[/autoit] [autoit][/autoit] [autoit]Telefonbuchkonverter aus Microsoft CRM 4.0 nach Aastra Detewe X320 Telefonanlage
Bentötigt:
Microsoft CRM 4.0
Microsoft Excel XLS Datei mit Pivottabellen aus MS CRM (Grunddaten)
Excel 2007
Win XP mit IE
OpenOffice 3.x
Notepad
X320 Telefonanlage
Fehler:
Internet-Explorer->CVS Hochladen Fenstern->Keine Automatische Pfadeingabe
Workarround: Fenster händisch schließen und neu starten
Cornelius Wasmund / 4logistic Ltd.
#comments-end
MsgBox(0, "Telefonbuchkonverter MS CRM 4 nach Detewe x320", "Telefonbuchkonverter aus Microsoft CRM 4.0 nach Aastra Detewe X320 Telefonanlage." & @CR & @CR & "Bentötigt:" & @CR & @CR & "Microsoft CRM 4.0" & @CR & "Microsoft Excel XLS Datei mit Pivottabellen aus MS CRM (Grunddaten)" & @CR & "Excel 2007" & @CR & "Win XP mit IE" & @CR & "OpenOffice 3.x" & @CR & "Notepad" & @CR & "X320 Telefonanlage :-)" & @CR & "" & @CR & "Fehler:" & @CR & "Internet-Explorer->CVS Hochladen Fenstern->Keine Automatische Pfadeingabe" & @CR & "Workarround: Fenster händisch schließen und neu starten" & @CR & "" & @CR & "Cornelius Wasmund / 4logistic Ltd.")
[/autoit] [autoit][/autoit] [autoit]#Include <Excel.au3>
#include <Array.au3>
#include <IE.au3>
$Pause=1000
$PauseMsgBox=2
$excel_aktive_kontakte=@ScriptDir & "\" & "Aktive_Kontakte.xls"
$excel_aktive_kontakte_tmp=@ScriptDir & "\" & "Aktive_Kontakte_x320.xls"
$excel_zwischenauswertung1=@ScriptDir & "\" & "Aktive_Kontakte_zwischenauswertung1.xls"
$OpenOffice='"C:\Programme\OpenOffice.org 3\program\scalc.exe"'
$x320IP="DEINE IP"
$x320passwort="DEINPASSWORT"
$telefonnummern=5000 ; Anzahl Telefonnummern für die Arraygroesse
#comments-start
***** Öffne Exceldatei, aktualisiere Daten und kopiere in Array *****
#comments-end
Local $oExcel = _ExcelBookOpen($excel_aktive_kontakte)
$aArray1 = _ExcelReadArray($oExcel, 5, 1, 10, 1) ; Senkrecht (vertikal)
;_ArrayDisplay($aArray1, "Senkrecht") ; DEBUG
[/autoit] [autoit][/autoit] [autoit]WinWaitActive("Microsoft Excel - Aktive_Kontakte.xls")
Sleep($Pause)
Send("!{F5}")
MsgBox(0,"ALT F5","Pivottabelle aktualisiert ALT F5", $PauseMsgBox)
$aArray1 = _ExcelReadArray($oExcel, 4, 1, $telefonnummern, 1) ; Senkrecht (vertikal) Spalte 1
$aArray2 = _ExcelReadArray($oExcel, 4, 2, $telefonnummern, 1) ; Senkrecht (vertikal) Spalte 2
$aArray3 = _ExcelReadArray($oExcel, 4, 3, $telefonnummern, 1) ; Senkrecht (vertikal) Spalte 3
$aArray4 = _ExcelReadArray($oExcel, 4, 4, $telefonnummern, 1) ; Senkrecht (vertikal) Spalte 4
$aArray5 = _ExcelReadArray($oExcel, 4, 5, $telefonnummern, 1) ; Senkrecht (vertikal) Spalte 5
;_ArrayDisplay($aArray1, "Senkrecht") ; DEBUG
[/autoit] [autoit][/autoit] [autoit]_ExcelBookClose($oExcel,0, 0) ; And finally we close out
[/autoit] [autoit][/autoit] [autoit]#comments-start
***** Lösche & Öffne Exceldatei Zwischenauswertugn, kopiere in Array in Excelsheet *****
#comments-end
FileDelete( $excel_zwischenauswertung1 )
MsgBox(0,"Löschen","1 Lösche alte Zwischenauswertung", $PauseMsgBox)
Local $oExcel = _ExcelBookNew();
_ExcelWriteArray($oExcel, 1, 1, $aArray1, 1) ; Schreibe das Array in horizontaler Richtung. Spalte 1
_ExcelWriteArray($oExcel, 1, 2, $aArray2, 1) ; Schreibe das Array in horizontaler Richtung. Spalte 2
_ExcelWriteArray($oExcel, 1, 4, $aArray3, 1) ; Schreibe das Array in horizontaler Richtung. Spalte 4
_ExcelWriteArray($oExcel, 1, 5, $aArray4, 1) ; Schreibe das Array in horizontaler Richtung. Spalte 5
_ExcelWriteArray($oExcel, 1, 6, $aArray5, 1) ; Schreibe das Array in horizontaler Richtung. Spalte 6
; Dummylesen von Zelle 1 zur Auswahl der Zelle
$sCellValue = _ExcelReadCell($oExcel, 1, 1) ; Zelle [$i,1] auslesen
; Zelle 1 bis 7 in Spalte 1 bis zum Datenende aller Spalten filtern
WinWaitActive("Microsoft Excel -")
sleep($Pause)
Send("^+{RIGHT 6}")
Send("^+{END}")
sleep($Pause)
Send("^+L")
; Dummylesen von Zelle 1 zur Auswahl der Zelle
$sCellValue = _ExcelReadCell($oExcel, 1, 1) ; Zelle [$i,1] auslesen
; Filtermenu ausklappen
send("!{down}fnnn{Enter}")
; Textfilter auswählen
#comments-start
sleep($Pause)
send("{down 6}")
; "Enthält nicht auswählen" für das Ausfiltern von Zeilen mit "Ergebnis"
send("{right}")
sleep($Pause)
send("{down 5}")
#comments-end
WinWaitActive("Benutzerdefinierter AutoFilter")
send("Ergebnis")
; Wechsle zum nächsten Filter
send("{TAB 2}")
sleep($Pause)
send("{down 3}")
sleep($Pause)
send("{ENTER}")
send("{ENTER}")
; Ersetze "(Leer)" durch nichts (loeschen)
sleep($Pause)
send("^h")
WinWaitActive("Suchen und Ersetzen")
Send("(Leer)")
sleep($Pause)
Send("!a")
WinWaitActive("Microsoft Office Excel", "Excel hat die Suche abgeschlossen")
Send("{Enter}")
WinWaitActive("Suchen und Ersetzen")
Send("{ESCAPE}")
; Schreibe Formel in Zeile 3 Spalte 2 mit Ziel Vollstaendiger Name und Firmenname in einer Zelle zusammmenzufügen
; SÄUBERN entfernt alle nicht Druckbaren Zeichen
_ExcelWriteCell($oExcel, '=SÄUBERN(TEIL(A2;1;12)&",:"&B2)', 2, 3) ; Schreibt in die Zelle [3,2]
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("C2{ENTER}")
; Kopiere Inhalt
Send("^c")
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("C2:C" & UBound($aArray1) & "{Enter}")
; Füge Inhalt ein
Send("^v")
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("A1{ENTER}")
$sCellValue = _ExcelReadCell($oExcel, 1, 1) ; Zelle [$i,1] auslesen
[/autoit] [autoit][/autoit] [autoit]; Waehle alles gefilterte aus
Send("^+{END}")
sleep($Pause)
Send("^c")
sleep($Pause)
_ExcelBookClose($oExcel,0, 0) ; Excel schliessen
FileDelete( $excel_zwischenauswertung1 )
MsgBox(0,"Löschen","2 Lösche alte Zwischenauswertung", $PauseMsgBox)
Local $oExcel = _ExcelBookNew();
; Dummylesen von Zelle 1 zur Auswahl der Zelle (Programmstart feststellen)
$sCellValue = _ExcelReadCell($oExcel, 1, 1) ; Zelle [$i,1] auslesen
WinWaitActive("Microsoft Excel -")
Send("^v")
; Alte Spalte 1 und 2 (Array1 aArray2 nicht mehr benoetigt, da in aArray3 zusammengefasst
; Daher loeschen
Sleep($Pause)
_ExcelColumnDelete($oExcel, 1, 2) ; Löscht Spalte 1 und Spalte2
_ExcelWriteCell($oExcel, "Name", 1, 1) ; Schreibt in die Zelle [1,1]
_ExcelWriteCell($oExcel, "Festnetz", 1, 2) ; Schreibt in die Zelle [1,2]
_ExcelWriteCell($oExcel, "Handy", 1, 3) ; Schreibt in die Zelle [1,3]
; Schreibe Formel in Zeile 4 Spalte 2 mit Ziel Telefon und Mobilrufnummer in einer Zelle zusammmenzufügen
; SÄUBERN entfernt alle nicht druckbaren Zeichen
_ExcelWriteCell($oExcel, '=SÄUBERN(B2&", "&C2)', 2, 4) ; Schreibt in die Zelle [3,2]
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("D2{ENTER}")
; Kopiere Inhalt
Send("^c")
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("D2:D" & UBound($aArray1) & "{Enter}")
; Füge Inhalt ein
Send("^v")
; Alles auswählen
send("^a")
; Ersetze ", " durch nichts (loeschen)
sleep($Pause)
send("^h")
WinWaitActive("Suchen und Ersetzen")
Send(",")
sleep($Pause)
Send("!a")
WinWaitActive("Microsoft Office Excel", "Excel hat die Suche abgeschlossen")
Send("{Enter}")
WinWaitActive("Suchen und Ersetzen")
Send("{ESCAPE}")
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("A1" & "{Enter}")
; Zelle 1 bis 4 in Spalte 1 bis zum Datenende aller Spalten filtern
WinWaitActive("Microsoft Excel -")
sleep($Pause)
Send("^+{RIGHT 3}")
Send("^+{END}")
sleep($Pause)
Send("^+L")
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("D1" & "{Enter}")
sleep($Pause)
; Filtermenu ausklappen
send("!{down}fnnn{Enter}")
WinWaitActive("Benutzerdefinierter AutoFilter")
send("Ergebnis")
; Wechsle zum nächsten Filter
send("{TAB 2}")
sleep($Pause)
send("{down 3}")
sleep($Pause)
send("{ENTER}")
send("{ENTER}")
; "Gehe zu" Zelle auswahl
Send("^g")
WinWaitActive("Gehe zu")
Send("A1{ENTER}")
$sCellValue = _ExcelReadCell($oExcel, 1, 1) ; Zelle [$i,1] auslesen
[/autoit] [autoit][/autoit] [autoit]; Waehle alles gefilterte aus
Send("^+{END}")
sleep($Pause)
Send("^c")
sleep($Pause)
_ExcelBookClose($oExcel,0, 0) ; Excel schliessen
FileDelete( $excel_zwischenauswertung1 )
MsgBox(0,"Löschen","3 Lösche alte Zwischenauswertung", $PauseMsgBox)
Local $oExcel = _ExcelBookNew();
; Dummylesen von Zelle 1 zur Auswahl der Zelle (Programmstart feststellen)
$sCellValue = _ExcelReadCell($oExcel, 1, 1) ; Zelle [$i,1] auslesen
WinWaitActive("Microsoft Excel -")
Send("^v")
_ExcelColumnDelete($oExcel, 4, 1) ; Löscht Spalte 4
sleep($Pause)
_ExcelBookSaveAs($oExcel, $excel_aktive_kontakte_tmp , "xls", 0, 1)
If Not @error Then MsgBox(0, "Erfolgreich!", "Die Datei wurde gespeichert.", 3)
_ExcelBookClose($oExcel, 1, 0)
#comments-start
***** Starte OpenOffice zur exportierung in CSV Format
***** Excel gibt keine Wahl des Trennzeichen
#comments-end
FileDelete( @ScriptDir & "\Aktive_Kontakte_x320.csv" )
Run(@ComSpec & " /c " & $OpenOffice & ' ' & @ScriptDir & '\Aktive_Kontakte_x320.xls',"", @SW_MAXIMIZE)
WinWaitActive("Aktive_Kontakte_x320.xls - OpenOffice.org Calc")
Sleep($Pause)
; Speichern unter Menü
Send("^+s")
WinWaitActive("Speichern unter")
Sleep($Pause)
; Auswahl CSV Format
Send("{TAB}")
Sleep($Pause)
Send("{DOWN 14}")
WinWaitActive("","Text CSV (.csv)")
Sleep($Pause)
Send("{ENTER}")
; Speichern Button
WinWaitActive("Speichern unter")
Sleep($Pause)
Send("!s")
; Format beibehalten (Kein ODF Format)
WinWaitActive("OpenOffice.org 3.0")
Sleep($Pause)
Send("{ENTER}")
; Textexport einstellen
WinWaitActive("Textexport")
Sleep($Pause)
Send("{ENTER}")
; Meldung "Nur die aktive Tabelle/Sheet wurde gespeichert" quittieren
WinWaitActive("OpenOffice.org 3.0")
Sleep($Pause)
Send("{ENTER}")
; OO.org beenden
WinWaitActive("Aktive_Kontakte_x320.csv - OpenOffice.org Calc")
Sleep($Pause)
Send("!{F4}")
WinWaitClose("Aktive_Kontakte_x320.csv - OpenOffice.org Calc")
Sleep($Pause)
#comments-start
***** Starte Notepad zur Manipulierung der ersten CSV Zeile
#comments-end
Run("Notepad.exe " & @ScriptDir & "\Aktive_Kontakte_x320.csv", "", @SW_MAXIMIZE)
WinWaitActive("Aktive_Kontakte_x320.csv - Editor")
Sleep($Pause)
; Zeilenende Zeile1
Send("{END}")
Sleep($Pause)
; Zeilende Text einfügen
Send(',"XXX"')
Sleep($Pause)
; Speichern
Send("!s")
WinWaitActive("Editor","speichern", 3)
if WinActivate("Editor","speichern") then Send("!j")
; Notepad beenden
Send("!{F4}")
if WinActivate("Editor","speichern") then Send("!j")
#comments-start
***** Starte IE um Daten ins Telefonbuch der Telefonanlage X320 zu laden
#comments-end
$oIE = _IECreate ($x320IP, 0)
WinWaitActive("OpenCom X320 - Windows Internet Explorer","home.asp?state=")
sleep($Pause)
Send($x320passwort & "{Enter}")
_IELoadWait ($oIE)
_IENavigate ($oIE, "http://" & $x320IP & "/config-r/home.asp?app=0&entry=101", 1)
_IELoadWait ($oIE)
; Löschen Button anklicken
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName ($oFrame, "SearchForm")
$oButton = _IEFormElementGetObjByName ($oForm, "Del")
_IEAction ($oButton, "Click")
_IELoadWait ($oFrame)
; Alles löschen Button anklicken
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName ($oFrame, "userForm")
$oButton = _IEFormElementGetObjByName ($oForm, "DelALL", 1)
_IEAction ($oButton, "Click")
_IELoadWait ($oFrame)
_IENavigate ($oIE, "http://" & $x320IP & "/config-r/home.asp?app=0&entry=105", 1)
; Datei hochladen auswählen
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName ($oFrame, "userForm")
$oButton = _IEFormElementGetObjByName ($oForm, "__file_upload_dahlem_impexp__")
$hwnd = _IEPropertyGet($oIE, "hwnd")
_IEAction ($oButton, "Click")
ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")
; ***FEHLER***
; Schreibt erst nachdem "Auswahlfenster" geschlossen und neu geöffnet wird ....
sleep($Pause)
;if WinExists("Datei zum Hochladen auswählen","") then msgbox(0,"ok1","ok1")
;WinWait("Datei zum Hochladen auswählen","")
;WinWaitActive("Datei zum Hochladen auswählen","")
sleep($Pause)
sleep($Pause)
send(@ScriptDir & "\Aktive_Kontakte_x320.csv")
Send("{ENTER}")
; Laden Button drücken
_IELoadWait ($oFrame)
sleep($Pause)
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName ($oFrame, "userForm")
$oButton = _IEFormElementGetObjByName ($oForm, "SUBMIT")
$hwnd = _IEPropertyGet($oIE, "hwnd")
_IEAction ($oButton, "Click")
ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")
_IELoadWait ($oFrame)
sleep($Pause)
; Profil auswählen
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName($oFrame, "userForm")
$oSelect = _IEFormElementGetObjByName($oForm, "sp")
_IEFormElementOptionSelect($oSelect, "CAO-Mysql-Import", 1, "byText")
; Ziel-Telefonbuch auswählen
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName($oFrame, "userForm")
$oSelect = _IEFormElementGetObjByName($oForm, "usrid")
_IEFormElementOptionSelect($oSelect, "Zentral", 1, "byText")
; Bestehende Einträge löschen -> JA
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName($oFrame, "userForm")
$oSelect = _IEFormElementGetObjByName($oForm, "merge")
_IEFormElementOptionSelect($oSelect, "ja", 1, "byText")
; Weiter klicken
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName ($oFrame, "userForm")
$oButton = _IEFormElementGetObjByName ($oForm, "next")
$hwnd = _IEPropertyGet($oIE, "hwnd")
_IEAction ($oButton, "Click")
ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")
_IELoadWait ($oFrame)
sleep($Pause)
$oFrame = _IEFrameGetObjByName( $oIE, "basefrm" )
$oForm = _IEFormGetObjByName ($oFrame, "imForm")
$oButton = _IEFormElementGetObjByName ($oForm, "go")
$hwnd = _IEPropertyGet($oIE, "hwnd")
_IEAction ($oButton, "Click")
ControlSend($hwnd, "", "[CLASS:Internet Explorer_Server; INSTANCE:1]", "{Enter}")