Jump to content

Active Directory Daten in Word


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

für eine Word 2007 Vorlage sollen Daten aus dem Active Directory ausgelesen werden.

 

ABER: Es soll nur einmal ausgelesen werden und dann in eine Zwischendatei gespeichert werden und aus dieser Zwischendatei sollen dann in Zukunft die Daten ausgelesen werden damit auch Notebooknutzer die Vorlagen nutzen können wenn diese unterweg sind.

 

Es gibt ja eine Möglichkeit mit Hilfe von Textmarken dies zu machen, nur fragt er dann jedesmal vom AD ab und das darf nicht.

 

Hoffe ihr könnt mir helfen.

 

Gruß

Praktik

Link zu diesem Kommentar

Erstmal willkommen an Board!

 

Um Dir besser helfen zu können, würde uns helfen, wenn wir etwas mehr Informationen über das erhalten würden, was Ihr wollt.

 

Welche Informationen werden zum Beispiel aus dem AD gezogen?

Welche Daten müssen denn "Offline" zur Verfügung stehen?

 

So können wir uns ein besseres Bild davon machen und ggf. Alternativwege aufzeigen...

Link zu diesem Kommentar

Moin,

 

ja, natürlich, das geht. Ihr müsstet also die Formeln in eurer Vorlage so ändern, dass sie die lokal gespeicherte Datei auswerten, statt eine Verbindung ins AD aufzubauen.

 

Die Daten selbst kann man, wie du vorschlägst, z.B. mit einem VBS-Skript beim Logon aus dem AD lesen und in eine Datei schreiben. Falls kein Connect zum AD besteht, bleibt die Datei unangetastet.

 

Gruß, Nils

Link zu diesem Kommentar

Moin,

 

da ich den Code eurer Vorlage nicht kenne und darüber hinaus auch kein Office-Entwickler bin, kann ich dir das leider nicht sagen.

 

Allgemein wirst du hier aber auch keine fertigen Lösungen serviert bekommen, sondern Hinweise bei konkreten Fehler- oder Problemsituationen.

 

Hinweise zum Auslesen von Werten aus dem AD findest du im Internet einige, z.B. hier:

faq-o-matic.net » Ein AD-Attribut zu einem Logon-Namen herausfinden

 

Gruß, Nils

 

 

Gruß, Nils

Link zu diesem Kommentar

Hi,

 

derzeit gibt es noch keinen Code in der Vorlage, den soll ich ja gerade herausfinden womit ich leider nicht weiter komme :(

 

Ich muss wissen, wie bei der Anmeldung Daten aus dem AD lokal in einer Datei gespeichert werden und welcher Befehl/Code bei Word stehen muss damit diese Datei ausgelesen wird.

 

Im Internet findet man dazu aber nichts also bleiben mir nur Foren und die waren bis jetzt leider auch nicht sehr Hilfreich.

 

Gruß

Praktik

Link zu diesem Kommentar

derzeit gibt es noch keinen Code in der Vorlage, den soll ich ja gerade herausfinden womit ich leider nicht weiter komme :(

 

Hast Du denn mit VB Scripten schon einmal gearbeitet?

 

Ich muss wissen, wie bei der Anmeldung Daten aus dem AD lokal in einer Datei gespeichert werden und welcher Befehl/Code bei Word stehen muss damit diese Datei ausgelesen wird.

 

Zum auslesen von Daten aus dem AD hat dir Nils schon den richtigen Hinweis gegeben. Testen und anpassen mußt Du selbst, auch wenn dir das nicht passt.

 

Um eine Textdatei zu erstellen und Werte einzutragen, findest Du hier ein Beispiel: VBSCript: CreateTExtFile | JavaScript u.a. Script-Sprachen | wer-weiss-was Mit etwas Einsatz und guten Willen bekommst Du das alles zusammen in ein Script.

 

Wie Du dann in Word auf diese TXT zugreifen kannst, weiß ich auch nicht. Aber in einem Word Forum sollte sich das finden lassen.

 

Im Internet findet man dazu aber nichts also bleiben mir nur Foren und die waren bis jetzt leider auch nicht sehr Hilfreich.

 

Die Foren sind im Internet und wenn ich danach suche, werde ich erschlagen mit Ergebnissen. Mir dünkt, Du hast bisher noch gar nicht richtig gesucht.

Link zu diesem Kommentar
Hast Du denn mit VB Scripten schon einmal gearbeitet?

Nein

 

Wie Du dann in Word auf diese TXT zugreifen kannst, weiß ich auch nicht. Aber in einem Word Forum sollte sich das finden lassen.

Sieht bisher aber nicht danach aus

 

Die Foren sind im Internet und wenn ich danach suche, werde ich erschlagen mit Ergebnissen. Mir dünkt, Du hast bisher noch gar nicht richtig gesucht.

 

Mir ist schon klar das die Foren im Internet sind, ich meinte über Google habe ich nichts dergleichen gefunden also bleibt mir nur das eigene Nachfragen über Foren.

Und dir dünkt falsch, denn ich bin schon den ganzen Tag auf der Suche nach einer Lösung...

 

Um AD Daten in eine txt Datei zu bringen habe ich bisher diesen Befehl gefunden:

@echo off & setlocal

set "G=%temp%\GetL.vbs"

>"%G%" echo WScript.Echo GetObject("LDAP://" ^& CreateObject("ADSystemInfo").UserName).l

for /f "delims=" %%i in ('cscript //nologo "%G%"') do set "Ort=%%i"

echo %Ort%

 

Allerdings gibt der nur ein Attribut wieder und nicht mehrere. Aber selbst wenn ich das komplett hätte, wüsste ich dennoch nicht wie ich das in eine Word Datei importieren kann. Ein weiterer Arbeitstag an dem ich nicht weiter gekommen bin... :(

 

Ich habe auch noch dieses Makro gefunden, dass aber auch nicht funktioniert:

Sub Insert_EinzelZahlungen()

Dim oDoc As Document

Set oDoc = ActiveDocument

Dim nDoc As Document

Set nDoc = Documents.Open(FileName:="c:\test.txt", Visible:=False)

oDoc.Bookmarks("test").Range.Text = nDoc.Range.Text

nDoc.Close

End Sub

bearbeitet von Praktik
Link zu diesem Kommentar

Und wenn ihr noch nicht genug habt, dann könntet ihr mir ja vll. bei diesem Skript helfen:

Sub TextImport()

 

Dim dlgtext As FileDialog

Dim strText As String

Dim rng As Word.Range

Dim bmkBeginn As Word.Bookmark

Dim bmkEnde As Word.Bookmark

 

Dim fsize As Long

Dim fentry As Single

 

fsize = 9

fentry = 2

 

Set dlgtext = Application.FileDialog(msoFileDialogFilePicker)

dlgtext.Title = "Auswahl der Textdatei"

dlgtext.Filters.Add "Textdateien", "*.txt", 1

dlgtext.ButtonName = "Import"

 

With dlgtext

If .Show = -1 Then

strText = dlgtext.SelectedItems.Item(1)

' frmText.Show

 

Set rng = Selection.Paragraphs(1).Range.Duplicate

rng.Collapse wdCollapseStart

rng.InsertParagraph

rng.Collapse wdCollapseEnd

Set bmkEnde = rng.Bookmarks.Add(Name:="BMEnde", Range:=rng)

rng.Collapse wdCollapseStart

rng.MoveEnd wdParagraph, -1

rng.Collapse wdCollapseStart

rng.InsertFile (strText)

rng.Collapse wdCollapseStart

Set bmkBeginn = rng.Bookmarks.Add(Name:="BMBeginn", Range:=rng)

Set rng = ActiveDocument.Range(Start:=bmkBeginn.Range.Start, End:=bmkEnde.Range.End)

With rng

.Font.Size = fsize

.ParagraphFormat.Alignment = wdAlignParagraphLeft

.ParagraphFormat.LeftIndent = CentimetersToPoints(fentry)

.Bookmarks.Add Name:="Einfuegetext", Range:=rng

.Collapse wdCollapseEnd

End With

Call TexteFormatieren(ActiveDocument.Bookmarks("Einfuegetext").Range)

End If

End With

dlgtext.Filters.Clear

Set dlgtext = Nothing

Set rng = Nothing

Set bmkBeginn = Nothing

Set bmkEnde = Nothing

 

End Sub

 

Sub TexteFormatieren(ByVal rngTM As Word.Range)

 

Dim para As Word.Paragraph

 

For Each para In rngTM.Paragraphs

If InStr(1, para.Range.Text, "Pressures:", vbTextCompare) > 0 Then

para.Range.Font.Bold = True

para.Range.Font.Underline = wdUnderlineSingle

End If

Next para

 

End Sub

 

Was bei diesem Skript verändert werden müsste wäre:

 

Das er die .txt Datei automatisch einliest, das Makro würde zu einer Vorlage gehören und beim öffnen soll die .txt Datei eingelesen werden.

Und das die Schriftart und größe automatisch umgewandelt wird.

 

Gruß

Praktik

Link zu diesem Kommentar
Nein

Um AD Daten in eine txt Datei zu bringen habe ich bisher diesen Befehl gefunden:

 

 

Allerdings gibt der nur ein Attribut wieder und nicht mehrere. Aber selbst wenn ich das komplett hätte, wüsste ich dennoch nicht wie ich das in eine Word Datei importieren kann. Ein weiterer Arbeitstag an dem ich nicht weiter gekommen bin... :(

 

Man muss sich mit dem scripten schon etwas beschäftigen, und Nils hat dir schon die richtige Vorlage genannt, Du mußt etwas mehr draus machen. Hier mal ein Script das sehr viel macht. Wegen der Zeichenbegrenzung auf das nötigste reduziert.

 

'Das Script liest verschiedene Attribute des angemeldeten Benutzers aus dem Benutzerobjekt im Ad aus.

   Dim WshShell
   Dim WshSysEnv
   Dim strUserDNSDomain, strUser, strVollstaendig
   Dim strName, strOfficeName, strTelNo, strNebenstelle, strFaxNo, strFaxKurz, strmail, strOrt, strBeschreibung, strAbteilung
   Dim strChef, strChefName
   Dim regBenutzerEinstellungen, regSchluessel, regGWGLDR

   Set WshShell = CreateObject("WScript.Shell")
   Set WshSysEnv = WshShell.Environment("PROCESS")
   Set objNet = CreateObject("Wscript.Network")
   strUser = objNet.UserName

   'SAM2ADInfo liest den vollständigen Namen incl. dem Pfad im AD aus.
   strVollstaendig = SAM2ADInfo(strUser, "distinguishedName")

   'Die USERDNSDOMAIN die man auch über SET in der Commandline zu sehen bekommt.
   strUserDNSDomain = WshSysEnv("USERDNSDOMAIN")

   'Das vollständige Objekt holen, damit die Attribute ausgelesen werden können.
   Set obj = GetObject("LDAP://" & strUserDNSDomain & "/" & strVollstaendig)

   'Ab hier werden die Attribute den Variablen zugewiesen
   strName = obj.givenName & " " & obj.sn
   strOfficeName = obj.sn & ", " & obj.givenName
   strTelNo = obj.telephoneNumber
   strNebenstelle = Right(strTelNo, 3)
   strFaxNo = obj.facsimileTelephoneNumber
   strFaxKurz = Right(strFaxNo, 3)
   strmail = obj.mail
   strOrt = obj.l '(L = Location)
   strBeschreibung = obj.Description
   strAbteilung = obj.Department

   'Der eingetragene Vorgesetzte wird über LDAP ausgelesen.
   strChef = obj.Manager
   If strChef <> "" Then
       Set objChef = GetObject("LDAP://" & strUserDNSDomain & "/" & strChef)
       strChefName = objChef.givenName & " " & objChef.sn
   End If

 

Die Function SAM2ADInfo hab ich nicht mitgepostet, die findest Du bei Nils auf der HP. Du musst also nur noch die Werte aus den Variablen in Textdateien schreiben.

 

Die Funktion um die Werte in die Registry zu schreiben musst Du nicht unbedingt nehmen, Du kannst natürlich auch statt dessen die Werte in eine Textdatei schreiben lassen. Wie man eine Textdatei erstellt und eine Zeile einträgt weißt Du ja schon, den Link zu einem solchen Beispiel hatte ich dir gepostet.

 

Ich habe auch noch dieses Makro gefunden, dass aber auch nicht funktioniert:

 

Da hatte ich noch keine Zeit das zu testen.

Link zu diesem Kommentar

Hallo,

 

erstmal vielen Dank für die Antworten. Ich bin mittlerweile ein ganzes Stück weiter.

 

Ich habe jetzt ein VBSkript, mit dem Daten aus dem AD in das Postanschrift Feld von Word geschrieben werden. Außerdem wird im Benutzerordner in einem Verzeichnis eine Datei mit den Daten aus dem AD erstellt.

 

Im Grunde ist mein Anfangsproblem gelöst nur habe ich jetzt ein Problem mit dem VBSkript. Wenn er am Ende des Skriptes die Datei abspeichert, so speichert er sie nicht in einer Vorlagen Datei.

 

.doc und auch .docx funktionieren aber sobald ich es auf .dotx ändere sagt er immer die Datei wäre Fehlerhaft.

 

Frage ist also, wie kann ich das VBSkript dazu bringen eine Word Datei als Vorlage abzuspeichern?

 

Gruß

Praktik

Link zu diesem Kommentar

Im Grunde ist mein Anfangsproblem gelöst nur habe ich jetzt ein Problem mit dem VBSkript. Wenn er am Ende des Skriptes die Datei abspeichert, so speichert er sie nicht in einer Vorlagen Datei.

 

.doc und auch .docx funktionieren aber sobald ich es auf .dotx ändere sagt er immer die Datei wäre Fehlerhaft.

 

Zeig doch den Code, dann kann man dir evtl. helfen.

 

BTW: Zum bearbeiten von VB Scripten solltest Du entweder einen richtigen VB Script Editor verwenden, alternativ geht natürlich auch der VBA-Editor von Office.

Link zu diesem Kommentar

Hier ist der Code:

 

Set WshShell = WScript.CreateObject("Wscript.Shell")
AppData = WshShell.ExpandEnvironmentStrings("%AppData%")
Set objSysInfo = CreateObject("ADSystemInfo")

strUser = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUser)

Set objWord = CreateObject("Word.Application")
objWord.UserName = objUser.givenName & " " & objUser.SN
objWord.UserInitials = Left(objUser.givenName, 1) & Left(objUser.SN, 1)
objWord.UserAddress = "Abteilung" & Chr(13) & objUser.department & Chr(13) & objUser.givenName & " " & objUser.SN & Chr(13) & _ 
objUser.telephoneNumber & Chr(13) & _ 
objUser.mail

Set objWord = CreateObject("Word.Application")
objWord.Visible = True

Set objDoc = objWord.Documents.Add()
Set objSelection = objWord.Selection

objSelection.Font.Name = "News Gothic"
objSelection.Font.Size = "7"
objSelection.TypeText "Abteilung" & Chr(13) & objUser.department & Chr(13) & objUser.givenName & " " & objUser.SN & Chr(13) & _
objUser.telephoneNumber & Chr(13) & _ 
objUser.mail
objSelection.TypeParagraph()

objDoc.SaveAs(AppData & "\Microsoft" & "\Document Building Blocks" & "\1031" & "\Benutzerdaten.dotx")

objWord.Quit

 

So wie er jetzt ist funktioniert er zwar, aber man kann die .dotx Datei nicht öffnen. Habe eben gerade etwas mit CompatibilityMode gefunden was man dahinter setzen kann, da bin ich gerade am ausprobieren.

 

Zum bearbeiten nutze ich derzeit Notepad++, das geht auch^^

 

-edit-

Ich sehe gerade CompatibilityMode wurde in Zusammenhang mit VBA nicht mit VBS erwähnt...

Link zu diesem Kommentar

Hmm, ich würde das andersrum machen. Schreib die benötigten Werte in die Registry. Sobald die Word Vorlage geöffnet wird, holst Du dir die Werte aus der Registry und schreibst sie ins Word Dokument. Geht IMHO einfacher.

 

Und zum testen kannst Du objWord.Visible = True auf objWord.Visible = False abändern. Ich kann den Code später auch noch testen.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...