2010-01-11 5 views
4

Je dois convertir une image dans Excel (ou via VBA) à base64 (à la fin, je vais faire une sortie XML).Convertir l'image (jpg) en base64 dans Excel VBA?

Comment est-ce que je peux faire ceci? Ai-je besoin de faire une référence à DOM?

Ive été la lecture this question mais il ne fonctionne que pour les chaînes de texte non images ...

Quelqu'un at-il un code que je peux voir?

+2

Comment obtenez-vous cette image? Presse-papiers, système de fichiers? –

+0

Où est votre image? Est-ce un fichier séparé ou est-il intégré à votre feuille Excel? –

+0

L'image est dans mon système de fichiers (HD). – SpeeD72

Répondre

0

S'il vous plaît, jetez un coup d'oeil ici: Base64 Encode & Decode Files

EDIT: Jetez un coup d'oeil sur http://pastebin.com/f2a199d30

+0

Merci beaucoup Rubens. Cette solution nécessite que l'utilisateur installe un composant externe, (si je comprends bien!) Le problème est que le classeur doit être distribuable ... Connaissez-vous une solution avec un composant couramment utilisé? – SpeeD72

+0

Vous parlez de "Scripting.FileSystemObject" '? C'est un "composant couramment utilisé" pour sûr =) –

+0

Je parle du XBase64.dll que le code m'oblige à installer ... c'est la note dans le code ... 'Cette fonction utilise le composant XBase64 de Belus Technology à Base64 encoder un fichier. 'Le composant XBase64 est disponible à ' http://www.xstandard.com/fr/documentation/xbase64/ – SpeeD72

7

Heres une fonction. Je ne me souviens pas d'où je l'ai eu.

Public Function EncodeFile(strPicPath As String) As String 
    Const adTypeBinary = 1   ' Binary file is encoded 

    ' Variables for encoding 
    Dim objXML 
    Dim objDocElem 

    ' Variable for reading binary picture 
    Dim objStream 

    ' Open data stream from picture 
    Set objStream = CreateObject("ADODB.Stream") 
    objStream.Type = adTypeBinary 
    objStream.Open 
    objStream.LoadFromFile (strPicPath) 

    ' Create XML Document object and root node 
    ' that will contain the data 
    Set objXML = CreateObject("MSXml2.DOMDocument") 
    Set objDocElem = objXML.createElement("Base64Data") 
    objDocElem.dataType = "bin.base64" 

    ' Set binary value 
    objDocElem.nodeTypedValue = objStream.Read() 

    ' Get base64 value 
    EncodeFile = objDocElem.Text 

    ' Clean all 
    Set objXML = Nothing 
    Set objDocElem = Nothing 
    Set objStream = Nothing 

End Function