2013-06-14 5 views
5

Pracuję nad przeniesieniem project in Windows na system OSX. Mam problemy z VBA dla OSX Word 2011 not allowing you to send POSTs to a server i zorientowali się, how to return a string result from an external script. Teraz muszę wstawić obraz do mojego pliku Word z adresu URL zbudowanego za pomocą zwrotu mojego zewnętrznego skryptu.Dodawanie obrazu z adresu URL w programie Word 2011 dla systemu Mac OSX przy użyciu języka VBA

Obecna próba jest następujący, i pracuje w systemie Windows, ale wywala Słowo w OSX:

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

Po robi jakieś badania, to wygląda jak MS może wyłączyć tę funkcję w OSX jako „zagrożenie dla bezpieczeństwa” . Nadal muszę to usprawnić. Czy ktoś wie, w jaki sposób VBA dla Office 2011, aby to działało, lub z wyjątkiem tego obejścia? Próbuję uniknąć zapisywania pliku obrazu na dysk, jeśli to możliwe.

UPDATE: Stworzyłem skrypt Pythona na uzyskanie plik obrazu z adresu URL, ale nadal nie wiem, jak się to zdjęcie ze skryptu Pythona w VBA, a stamtąd do dokumentu programu Word Pod lokalizacja kursora. Ważne fragmenty skryptu znajdują się poniżej. Obraz jest odczytywany jako obiekt PIL i mogę go wyświetlić, używając tylko img.show(), ale nie jestem pewien, jaki to typ pliku lub jak go przekonać do VBA.

# 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 

Zauważ, że w powyższym args.webAddr i args.filename są przekazywane do skryptu przy użyciu biblioteki argparse. Ten skrypt działa i wyświetli plik obrazu, którego oczekuję. Wszelkich pomysłów, jak uzyskać ten obraz w programie Word 2011 dla OSX i wstawić go pod kursorem?

Wielkie dzięki!

Edytuj: zaktualizował link do projektu po migracji do github.

+0

Tak, Vba na Macu to horror. Utknąłem z samym kodem. Mam nadzieję, że odpowiedź, którą otrzymałeś, działa dla ciebie :) – Kathara

Odpowiedz

2

Stare pytanie, ale brak odpowiedzi, a widzę tę samą awarię tutaj, gdy obraz znajduje się pod adresem http. Myślę, że możesz użyć następującego obejścia:

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

Muszę jeszcze to przetestować, ale jeśli w końcu rozwiązałeś mój problem, to przekażę każdą odpowiedź, jaką kiedykolwiek podałeś! Tyle tylko, że myślę, że filtrują bombardowanie, więc nie bardzo, ale będę chciał. – Engineero

+0

To zadziałało! W końcu udało mi się to zepsuć, a twoje obejście naprawiło mój problem. Jest jeszcze więcej pracy do wykonania, ale była to ogromna pomoc. Dziękuję Ci! – Engineero

+1

Mam nadzieję, że nadal działa w nowej wersji! –