Aktionen

Office:Excel LDIF Export

Aus znilwiki

Version vom 21. Januar 2012, 23:22 Uhr von BLinz (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Exportiert Daten aus Excel so das Sie mit ldif.exe wieder ins AD eingelesen werden können.

 
Public Sub SaveLDIF()
'Speichert Inhalte eines Arbeitsblattes als Textdatei die danach mit LDIFDE.exe eingelesen werden kann.
'14.06.2008 von Bernhard Linz, DATAGROUP Bremen GmbH, 
'Bernhard.Linz@datagroup.de
'Anders als CSVDE.EXE erwartet LDIFDE.EXE die Werte nicht hintereinander sondern untereinander.
'im Format "Feldename: Wert"
'Die ersten beiden Felder müssen(!!) dabei immer dn (=LDAP-Pfad) und changetype (add, modify, delete) sein.
'Die restliche Reihenfolge ist egal.
'Jedoch zu beachten: Zuerst OU's anlegen damit darin die Gruppen und Benutzer angelegt werden können
'Dann die Benutzer, da die Gruppenmitgliedschaft in den Gruppen selbst angegeben wird
'Und die Benutzer deshalb schon vorhanden sein müssen wenn Gruppen mit Mitgliedern erstellt werden

Dim Bereich As Object, Zeile As Object, Zelle As Object, Tabellenblatt As Object
Dim SchreibString As String
Dim LDIFDatei As String
Dim Zeilenzaehler As Double
Dim Zellenzaehler As Double
Dim I As Double

'Abfrage des Dateinames für die Exportdatei
'Mit Vorschlag des Dateinames und Pfades
'Es wird der Pfad der momentanen Excel-Datei vorgschlagen
'Als Dateiname wird der Name der Exceldatei, jedoch mit der Endung .LDIF vorgeschlagen

LDIFDatei = ActiveWorkbook.FullName
LDIFDatei = Replace(LDIFDatei, ".xls", ".ldif")
LDIFDatei = InputBox("Wie soll die Exportierte LDIF-Datei heißen (inkl. Pfad)?", "LDIF-Export", LDIFDatei)
If LDIFDatei = "" Then Exit Sub ' Falls Abbrechen oder kein Dateiname angegeben wurde Programm beenden

'Die Feldnamen holen - da wir sie bei jedem neuen Eintrag neu brauchen
'Dazu zählt das Programm die Anzahl der Belegten Zellen
Zeilenzaehler = 0
For I = 1 To 255
    If ActiveSheet.Cells(1, I).Text <> "" Then
        SchreibString = ActiveSheet.Cells(1, I).Text
        Zeilenzaehler = Zeilenzaehler + 1
    End If
Next

ReDim Feldnamen(Zeilenzaehler) As String
For I = 1 To Zeilenzaehler
    Feldnamen(I) = ActiveSheet.Cells(1, I).Text
Next

'So, nun haben wir in der Variablen Feldnamen() die Namen der Felder
'Nun Zeilenweise Schreiben
'Die Schleife habe ich mich im Script CSV-Export abgeschaut - Sie arbeitet nur den benutzten Bereich
'Zeile für Zeile, Feld für Feld ab. Nur die erste Zeile wollen wir überspringen - dort stehen ja die
'Feldnamen drin - und die haben wir uns ja schon geholt

Set Bereich = ActiveSheet.UsedRange
Zeilenzaehler = 1
Zellenzaehler = 1
SchreibString = ""

Open LDIFDatei For Output As #1
    For Each Zeile In Bereich.Rows
        If Zeilenzaehler > 1 Then 'Wir wollten doch die erste Zeile auslassen
            For Each Zelle In Zeile.Cells
                SchreibString = Feldnamen(Zellenzaehler) & ": " & Zelle.Value
                Print #1, SchreibString
                Zellenzaehler = Zellenzaehler + 1
            Next
            SchreibString = ""
            Print #1, "" 'Nach jeden Abschnitt = Benutzer 2 Leerzeilen für die bessere Lesbarkeit
            Print #1, ""
        End If
        Zeilenzaehler = Zeilenzaehler + 1
        Zellenzaehler = 1
    Next
 
  Close #1
  Set Bereich = Nothing
  MsgBox "Datei wurde exportiert nach" & vbCrLf & LDIFDatei
End Sub
Loading comments...