94451
Goto Top

Bilder vom LDAP in VBA - Excel

Hallo,

ich mache über VBA einen Abruf vom LDAP um die eine Userliste vom Unternehmen zu ziehen...

mit:
Set oUser = GetObject(objRecordSet.Fields("aDSPath"))

hole ich mir den User und mir
oUser.sAMAccountName

z.B. seinen Usernamen...
jetzt möchte ich aber auch die Bilder haben.

1. Welchen Parameter hat das Bildfeld?
2. Wie kann ich die in einer Zelle / als String speichern (geht da was mit base64 wenn ja wie)
3. Wie kann ich die in einem Form als Bild anzeigen

Ich arbeite mit Office 2013 (soll aber auch 2016 tauglich sein).

@129813: so besser?


Vielen Dank

Content-Key: 315643

Url: https://administrator.de/contentid/315643

Printed on: May 1, 2024 at 21:05 o'clock

Member: colinardo
colinardo Sep 19, 2016 updated at 08:44:59 (UTC)
Goto Top
Moin.
Kein Problem, das Bild ist ein ByteArray und ist in der Eigenschaft thumbnailPhoto hinterlegt, hiermit schreibst du das Bild in eine Datei und kannst es dann in Excel mit den bekannten Methoden (ActiveSheet.Shapes.AddPicture(....) )einfügen.
Sub WriteBytes(file, bytes)
  Dim objStream
  Set objStream = CreateObject("ADODB.Stream")  
  objStream.Type = 1
  objStream.Open
  objStream.Write bytes
  objStream.SaveToFile file, 2
End Sub

Set oUser = GetObject(objRecordSet.Fields("aDSPath"))  
WriteBytes "C:\photo.png", oUser.thumbnailPhoto  
Grüße Uwe

p.s. die Powershell-Variante kannst du in deinem letzten Thread nachlesen face-wink
Mitglied: 94451
94451 Sep 19, 2016 at 08:47:11 (UTC)
Goto Top
@uwe,

sehr sehr geil...
jetzt nur die Frage, gibt es eine Möglichkeit die Bytes nicht auf einem Laufwerk als Datei abzulegen sondern direkt als "String" in Zellen???

und die darauffolgende Frage wäre dann wie kann ich dann in einer Form diesen "String" wieder als Bild umkonvertieren?
Member: colinardo
colinardo Sep 19, 2016 updated at 09:03:01 (UTC)
Goto Top
Zitat von @94451:
jetzt nur die Frage, gibt es eine Möglichkeit die Bytes nicht auf einem Laufwerk als Datei abzulegen sondern direkt als "String" in Zellen???
Ja, z.B. als Base64 kodierter String, hier die Funktion dazu:
Function EncodeBase64(bytes)
  dim objDOM, objEL
  Set objDOM = CreateObject("Microsoft.XMLDOM")  
  Set objEL = objDOM.createElement("temp")  
  objEL.DataType = "bin.base64"  
  objEL.NodeTypedValue = bytes
  encodeBase64 = objEL.Text
End Function
und die darauffolgende Frage wäre dann wie kann ich dann in einer Form diesen "String" wieder als Bild umkonvertieren?
Zurück in Bytes einfach Base64 umgekehrt ins ByteArray konvertieren und wie oben wegschreiben face-smile
Function DecodeBase64(base64)
  dim objDOM, objEL
  Set objDOM = CreateObject("Microsoft.XMLDOM")  
  Set objEL = objDOM.createElement("temp")  
  objEL.DataType = "bin.base64"  
  objEL.Text = base64
  decodeBase64 = objEL.NodeTypedValue
End Function

Wie du Bilder in Excel hinzufügst/direkt als Bild einbettest habe ich oben schon geschrieben (ActiveSheet.Shapes.AddPicture(...)), alternativ ein Image-Object auf einer Form platzieren und das temporär erzeugte Bild in das Image-Objekt laden (Image1.Picture = LoadPicture("C:\photo.png")).

Les dir einfach die Doku dazu durch, dann ist das alles kein Hexenwerk, ein bißchen APIs lesen sollte absolut machbar sein.