Fritzbox Telefonbuch - XML-Importdatei aus Excel erstellen

PeterleB

Neuer User
Mitglied seit
11 Sep 2019
Beiträge
2
Punkte für Reaktionen
0
Punkte
1
Schon vor drei Jahren war das mal Thema hier ohne endgültige Lösung.
Ich bastele derzeit an einer Möglichkeit.
Also: Eine Excel-Datei mit 5 Spalten erstellen.
Z. Bsp
Name (realName)Telefon privat (home)Telefon geschäftlich (work)Telefon mobil (mobile)Fax (fax_work)

Die Spalten sollten als Text formatiert sein, dann lassen sich die die Telefonnummern besser eingeben (führende Null oder Pluszeichen).
Eine Formatierung bzw. Validierung der Nummer soll auch noch eingebaut werden.
Über Entwicklertools ein neues Makro anlegen und folgenden Code einfügen:

Code:
Sub XML_Export()
Dim strDateiname As String
Dim strDateinameZusatz As String
Dim strMappenpfad As String
Dim intCutExt

'Datename ohne Ext. (nach Punkt suchen):
intCutExt = Len(ActiveWorkbook.Name) - InStrRev(ActiveWorkbook.Name, ".") + 1
strMappenpfad = Left(ActiveWorkbook.FullName, Len(ActiveWorkbook.FullName) - intCutExt)

'strDateinameZusatz = "-" & Year(ActiveSheet.Cells(3, 1).Value) & "-" & Month(ActiveSheet.Cells(3, 1).Value) & ".xml"
strDateinameZusatz = "-" & Format(Now, "YYYY-MM-DD-HH-MM-SS") & ".xml"

strDateiname = InputBox("Bitte den Namen der XML-Datei angeben.", "XML-Export", strMappenpfad & strDateinameZusatz)
If strDateiname = "" Then Exit Sub

Range("A2").Select

'Erstellt die Telefonbuchdatei (hier: xxx.xml)
'Dateiname kann frei gewählt werden
'Der entsprechende Ordner MUSS vorhanden sein, da sonst ein Fehler auftritt
    Set fs = CreateObject("scripting.filesystemobject")
    
    Set a = fs.createtextfile(strDateiname, True)

'Schreibt den allgemeinen Teil der Telefonbuchdatei
    a.writeline ("<?xml version=" & """1.0""" & " encoding=" & """utf-8""" & "?>")
    a.writeline ("<phonebooks>")
    a.writeline ("<phonebook")
    'a.writeline ("<phonebook name=" & """Telefonbuch 1""" & " owner=" & """1""" & ">")


'Schleife zur Ermittlung aller Einträge
'Benutzt alle Datensätze, die einen Namen enthalten
    i = 0
    While ActiveCell.Offset(i, 0) <> ""
    
    Dim realName As String
    realName = ActiveCell.Offset(i, 0)
    Dim home As String
    home = ActiveCell.Offset(i, 1)
    Dim work As String
    work = ActiveCell.Offset(i, 2)
    Dim mobile As String
    mobile = ActiveCell.Offset(i, 3)
    Dim fax_work As String
    fax_work = ActiveCell.Offset(i, 4)

'Schreibt den Telefonbucheintrag
    a.writeline ("<contact><category>0</category>")
    a.writeline ("<person><realName>" + realName + "</realName></person><telephony>")
    a.writeline ("<number type=" & """home""" & " prio=" & """1""" & " id=" & """0""" & ">" + home + "</number>")
    a.writeline ("<number type=" & """work""" & " prio=" & """1""" & " id=" & """1""" & ">" + work + "</number>")
    a.writeline ("<number type=" & """mobile""" & " prio=" & """1""" & " id=" & """2""" & ">" + mobile + "</number>")
    a.writeline ("<number type=" & """fax_work""" & " prio=" & """1""" & " id=" & """3""" & ">" + fax_work + "</number>")
    a.writeline ("</telephony></contact>")
    
    i = i + 1
    Wend
'Ende der Schleife
    
'Ende der Telefonbuchdatei
    a.writeline ("</phonebook>")
    a.writeline ("</phonebooks")
    
MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub

Wenn man die erstellte XML-Datei in der Fritzbox zur Wiederherstellung des Telefonbuches benutzt, ergänzt die FB-Software selbst fehlende Bezeichner und Tags.
Achtung! Das vorhandene Telefonbuch wird immer überschrieben.

Nächster Schritt im Code wird das Ausfiltern leerer Zellen und Überlegungen zu weiteren sinnvollen Tags.
Und auch ein Import einer FB-Sicherungsdatei des Telefonbuches ist mittelfristig geplant.

Viel Vergnügen beim Anwenden und Experimentieren.
Für Hinweise bin ich sehr dankbar.

Viele Grüße
Peter
 
Sind dir diese Themen bekannt?

 
Den ersten Beitrag habe ich tatsächlich nicht gefunden, Danke.
CCW wandelt nur die verschiedenen Formate um, aber ist kein Editor.
Bearbeiten kann man nur in Excel.

Mit dem oberen Thema muss ich mich noch intensiv beschäftigen.

Danke für die Hinweise.

PS: Die Importmöglichkeit ist gut beschrieben. Mein Makro ist aber auch eine elegante Möglichkeit für den Export, finde ich.
 
Zuletzt bearbeitet:
Moin, ich hab deinen Code ein bisschen angepasst. Ich habe zwei kleine Tippfehler entfernt und ein Feld für die Email Adresse hinzugefügt. Außerdem sind Umlaute und besonders das & Zeichen im Namen kein Problem mehr.

Die Tabelle könnte dann so aussehen:

Name (realName)Telefon privat (home)Telefon geschäftlich (work)Telefon mobil (mobile)Fax (fax_work)Email (email)


Code:
Sub XML_Export()
Dim strDateiname As String
Dim strDateinameZusatz As String
Dim strMappenpfad As String
Dim intCutExt


'Datename ohne Ext. (nach Punkt suchen):
intCutExt = Len(ActiveWorkbook.Name) - InStrRev(ActiveWorkbook.Name, ".") + 1
strMappenpfad = Left(ActiveWorkbook.FullName, Len(ActiveWorkbook.FullName) - intCutExt)

'strDateinameZusatz = "-" & Year(ActiveSheet.Cells(3, 1).Value) & "-" & Month(ActiveSheet.Cells(3, 1).Value) & ".xml"
strDateinameZusatz = "-" & Format(Now, "YYYY-MM-DD-HH-MM-SS") & ".xml"

strDateiname = InputBox("Bitte den Namen der XML-Datei angeben.", "XML-Export", strMappenpfad & strDateinameZusatz)
If strDateiname = "" Then Exit Sub

Range("A2").Select

'Erstellt die Telefonbuchdatei (hier: xxx.xml)
'Dateiname kann frei gewählt werden
'Der entsprechende Ordner MUSS vorhanden sein, da sonst ein Fehler auftritt
    Set fs = CreateObject("scripting.filesystemobject")
  
    Set a = fs.createtextfile(strDateiname, True)

'Schreibt den allgemeinen Teil der Telefonbuchdatei
    a.writeline ("<?xml version=" & """1.0""" & " encoding=" & """ISO-8859-1""" & "?>")
    a.writeline ("<phonebooks>")
    a.writeline ("<phonebook name=""Telefonbuch"">")
    'a.writeline ("<phonebook name=" & """Telefonbuch 1""" & " owner=" & """1""" & ">")


'Schleife zur Ermittlung aller Einträge
'Benutzt alle Datensätze, die einen Namen enthalten
    i = 0
    While ActiveCell.Offset(i, 0) <> ""
  
    Dim realName As String
    realName = ActiveCell.Offset(i, 0)
    Dim home As String
    home = ActiveCell.Offset(i, 1)
    Dim work As String
    work = ActiveCell.Offset(i, 2)
    Dim mobile As String
    mobile = ActiveCell.Offset(i, 3)
    Dim fax_work As String
    fax_work = ActiveCell.Offset(i, 4)
    Dim email As String
    email = ActiveCell.Offset(i, 5)
    Dim test As String
  
    'ersetzt Umlaute
     realName = Replace(realName, "&", "&amp;")
'    realName = Replace(realName, "ö", "oe")
'    realName = Replace(realName, "Ö", "OE")
'    realName = Replace(realName, "ü", "ue")
'    realName = Replace(realName, "Ü", "UE")
'    realName = Replace(realName, "ä", "ae")
'    realName = Replace(realName, "Ä", "AE")
'    realName = Replace(realName, "ß", "ss")
'    realName = Replace(realName, "é", "e")
  


'Schreibt den Telefonbucheintrag
    a.writeline ("<contact><category>0</category>")
    a.writeline ("<person><realName>" + realName + "</realName></person><telephony nid=""3"">")
    a.writeline ("<number type=" & """home""" & " prio=" & """1""" & " id=" & """0""" & ">" + home + "</number>")
    a.writeline ("<number type=" & """mobile""" & " prio=" & """1""" & " id=" & """1""" & ">" + mobile + "</number>")
    a.writeline ("<number type=" & """work""" & " prio=" & """0""" & " id=" & """2""" & ">" + work + "</number>")
    a.writeline ("<number type=" & """fax_work""" & " prio=" & """0""" & " id=" & """3""" & ">" + fax_work + "</number>")
    a.writeline ("</telephony><services nid=""1"">")
    a.writeline ("<email classifier=""private"" id=""0"">" + email + "</email></services>")
    a.writeline ("<setup /><features doorphone=""0"" />")
    a.writeline ("<uniqueid>" + CStr(i) + "</uniqueid>")
    a.writeline ("</contact>")
  
    i = i + 1
    Wend
'Ende der Schleife
  
'Ende der Telefonbuchdatei
    a.writeline ("</phonebook>")
    a.writeline ("</phonebooks>")
  

  
MsgBox "Export erfolgreich. Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.