Engineero
Engineero

Reputation: 12908

Adding image from URL in Word 2011 for Mac OSX using VBA

I am working on porting a project in Windows over to OSX. I have overcome issues with VBA for OSX Word 2011 not allowing you to send POSTs to a server and have figured out how to return a string result from an external script. Now I have to insert an image in my Word file from a URL that is built using the return of my external script.

The current attempt is as follows, and works in Windows but crashes Word in OSX:

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

After doing some research, it looks like MS may have disabled this functionality in OSX as a "security risk". I still need to make it work. Does anybody know of a way within VBA for Office 2011 to make this work, or barring that a workaround? I am trying to avoid writing the image file to the disk if possible.

UPDATE: I have created a Python script for getting the image file from a URL, but I still do not know how to get this image from the Python script into VBA, and from there into the Word document at the location of the cursor. The important bits of the script are below. The image is read in as a PIL object and I can show it using img.show() just fine, but I am not sure what filetype this is or how to get VBA to accept it.

# 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

Note that in the above, args.webAddr and args.filename are passed to the script using the argparse library. This script works, and will show the image file that I expect. Any ideas on how to get that image into Word 2011 for OSX and insert it under the cursor?

Thanks a lot!

Edit: updated the link to the project since migrating to github.

Upvotes: 4

Views: 1554

Answers (1)

user1379931
user1379931

Reputation:

Old question, but no answer, and I see the same crash here when the image is at an http URL. I think you can use the following workaround

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

Upvotes: 2

Related Questions