2013-06-14 12 views
5

Sto lavorando al porting di project in Windows su OSX. Ho superato i problemi con VBA per OSX Word 2011 not allowing you to send POSTs to a server e ho capito how to return a string result from an external script. Ora devo inserire un'immagine nel mio file Word da un URL che viene costruito utilizzando il ritorno del mio script esterno.Aggiunta dell'immagine dall'URL in Word 2011 per Mac OSX tramite VBA

Il tentativo attuale è la seguente, e funziona in Windows, ma si blocca Word in OSX:

Selection.InlineShapes.AddPicture FileName:=File_Name, _ 
    LinkToFile:=False, SaveWithDocument:=True 

Dopo aver fatto qualche ricerca, sembra che Microsoft potrebbe aver disabilitato questa funzionalità in OSX come un "rischio per la sicurezza" . Devo ancora farlo funzionare. Qualcuno sa di un modo in VBA per Office 2011 per fare questo lavoro, o escludendo che una soluzione alternativa? Sto cercando di evitare di scrivere il file immagine sul disco, se possibile.

UPDATE: Ho creato uno script Python per ottenere il file di immagine da un URL, ma io ancora non so come ottenere questa immagine da script Python in VBA, e da lì nel documento di Word al posizione del cursore. I pezzi importanti della sceneggiatura sono sotto. L'immagine viene letta come un oggetto PIL e posso mostrarlo usando semplicemente img.show(), ma non sono sicuro di quale sia il tipo di file o come convincere VBA ad accettarlo.

# Import the required libraries 
from urllib2 import urlopen, URLError 
from cStringIO import StringIO 
from PIL import Image 

# Send request to the server and receive response, with error handling! 
try: 
    # Read the response and print to a file 
    result = StringIO(urlopen(args.webAddr + args.filename).read()) 
    img = Image.open(result) 
    img.show() 

except URLError, e: 
    if hasattr(e, 'reason'): # URL error case 
     # a tuple containing error code and text error message 
     print 'Error: Failed to reach a server.' 
     print 'Reason: ', e.reason 
    elif hasattr(e, 'code'): # HTTP error case 
     # HTTP error code, see section 10 of RFC 2616 for details 
     print 'Error: The server could not fulfill the request.' 
     print 'Error code: ', e.code 

Si noti che in quanto sopra, args.webAddr e args.filename sono passati allo script utilizzando la libreria argparse. Questo script funziona e mostrerà il file immagine che mi aspetto. Qualche idea su come ottenere quell'immagine in Word 2011 per OSX e inserirla sotto il cursore?

Grazie mille!

Modifica: aggiornato il collegamento al progetto dalla migrazione a github.

+0

Sì, Vba su mac è horror. Sono bloccato con qualche codice me stesso. Spero che la risposta che hai, funzioni per te :) – Kathara

risposta

2

Vecchia domanda, ma nessuna risposta, e vedo lo stesso crash qui quando l'immagine si trova su un URL http. Penso che sia possibile utilizzare la seguente soluzione alternativa

Sub insertIncludePictureAndUnlink() 
' Put your URL in here... 
Const theImageURL As String = "" 
Dim f As Word.Field 
Dim r As Word.Range 
Set f = Selection.Fields.Add(Range:=Selection.Range, Type:=wdFieldIncludePicture, Text:=Chr(34) & theImageURL & Chr(34), PreserveFormatting:=False) 
Set r = f.Result 
f.Unlink 
Set f = Nothing 
' should have an inlineshape in r 
Debug.Print r.InlineShapes.Count 
' so now you can do whatever you need, e.g.... 
r.Copy 
Set r = Nothing 
End Sub 
+0

Devo ancora testare questo, ma se hai finalmente risolto il mio problema per me, allora risparmierò ogni risposta che avresti mai dato! Tranne che penso che filtrino i bombardamenti diretti, quindi non proprio, ma lo farò. – Engineero

+0

Ha funzionato! Finalmente sono tornato a scherzare ancora con questo, e il tuo modo di risolvere il problema risolto. C'è ancora molto lavoro da fare, ma questo è stato di grande aiuto. Grazie! – Engineero

+1

Spero che funzioni ancora nella nuova versione! –