4

Windows のプロジェクトを OSXに移植する作業を行っています。OSX Word 2011 の VBA でPOST をサーバーに送信できないという問題を解決し、外部スクリプトから文字列の結果を返す方法を見つけました。ここで、外部スクリプトのリターンを使用して構築された URL から Word ファイルに画像を挿入する必要があります。

現在の試みは次のとおりで、Windows では機能しますが、OSX では Word がクラッシュします。

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

いくつかの調査を行った後、MS が「セキュリティ リスク」として OSX でこの機能を無効にした可能性があるようです。私はまだそれを機能させる必要があります。Office 2011のVBA内でこれを機能させる方法、または回避策を禁止する方法を知っている人はいますか? 可能であれば、イメージ ファイルをディスクに書き込まないようにしています。

更新: URL から画像ファイルを取得するための Python スクリプトを作成しましたが、この画像を Python スクリプトから VBA に取得し、そこからカーソルの場所にある Word ドキュメントに取得する方法はまだわかりません。スクリプトの重要な部分を以下に示します。画像はPILオブジェクトとして読み込まれ、問題なく表示できますimg.show()が、これがどのファイルタイプであるか、または 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

上記のargs.webAddrとは、ライブラリargs.filenameを使用してスクリプトに渡されることに注意してください。argparseこのスクリプトは機能し、期待どおりの画像ファイルが表示されます。その画像を Word 2011 for OSX に取り込み、カーソルの下に挿入する方法についてのアイデアはありますか?

どうもありがとう!

編集: github に移行してから、プロジェクトへのリンクを更新しました。

4

1 に答える 1

2

古い質問ですが、答えはありません。画像が http URL にある場合、ここで同じクラッシュが発生します。次の回避策を使用できると思います

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
于 2013-10-25T20:31:15.880 に答える