Praktik 10 Geschrieben 23. Januar 2012 Melden Teilen Geschrieben 23. Januar 2012 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 Zitieren Link zu diesem Kommentar
marka 584 Geschrieben 23. Januar 2012 Melden Teilen Geschrieben 23. Januar 2012 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... Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 23. Januar 2012 Autor Melden Teilen Geschrieben 23. Januar 2012 (bearbeitet) Hi, also die Daten stehen in einem Textfeld und sieht wie folgt aus: Abteilung [Abteilungsname] [Vor- und Nachname] Durchwahl: -000 Und das sind auch die Daten, die dann offline zur Verfügung stehen sollen. In den Word Optionen gibt es unter Erweitert ja das Feld Postanschrift in dem man das eintragen kann. Aber dann muss man es ja per Hand machen. Das hier hatte ich bisher gefunden, nur dafür muss man halt immer mit der Domäne verbunden sein: http://www.sysadminlab.net/other/inserting-active-directory-information-into-word-templates Vielleicht funktioniert es ja so: Wenn der User sich anmeldet wird ein Skript ausgeführt das Daten aus dem Active Directory ausliest und in eine Datei schreibt und Word liest dann die Daten aus dieser Datei aus. So oder so ähnlich. ^_^ Gruß Praktik bearbeitet 23. Januar 2012 von Praktik Zitieren Link zu diesem Kommentar
NilsK 2.958 Geschrieben 23. Januar 2012 Melden Teilen Geschrieben 23. Januar 2012 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 Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 23. Januar 2012 Autor Melden Teilen Geschrieben 23. Januar 2012 das freut mich, dass das geht. Wenn du mir jetzt noch sagen kannst wie das geht, wäre das echt super :) Zitieren Link zu diesem Kommentar
NilsK 2.958 Geschrieben 23. Januar 2012 Melden Teilen Geschrieben 23. Januar 2012 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 Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 23. Januar 2012 Autor Melden Teilen Geschrieben 23. Januar 2012 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 Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 23. Januar 2012 Melden Teilen Geschrieben 23. Januar 2012 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. Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 23. Januar 2012 Autor Melden Teilen Geschrieben 23. Januar 2012 (bearbeitet) 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 23. Januar 2012 von Praktik Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 23. Januar 2012 Autor Melden Teilen Geschrieben 23. Januar 2012 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 Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 25. Januar 2012 Melden Teilen Geschrieben 25. Januar 2012 NeinUm 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. Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 25. Januar 2012 Autor Melden Teilen Geschrieben 25. Januar 2012 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 Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 25. Januar 2012 Melden Teilen Geschrieben 25. Januar 2012 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. Zitieren Link zu diesem Kommentar
Praktik 10 Geschrieben 25. Januar 2012 Autor Melden Teilen Geschrieben 25. Januar 2012 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... Zitieren Link zu diesem Kommentar
Sunny61 807 Geschrieben 25. Januar 2012 Melden Teilen Geschrieben 25. Januar 2012 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. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.