VBA:使用外部脚本操作选定的图片



我有一个包含许多图片的dotx/docx文档,需要以相同的方式操作其中的许多图片。因此,我编写了一个Python脚本,它将在jpg文件上执行图像操作。

我现在需要做的就是写一个VBA脚本,将当前选择的图片保存为jpg文件,调用Python脚本并替换文档中的图片。然后将此宏分配给键盘快捷键。

我的VBA代码目前是:

Sub ManipulateImage()
Dim sel As Word.Selection
Dim shp As InlineShape
Set sel = Selection
If sel.Type = wdSelectionInlineShape Then
Set shp = sel.InlineShapes(1)
Debug.Print "**"
'Save as picture
End If

'Manipulate saved picture
Shell "mypythonscript.py imgfile"

'Replace picture
'sel.PasteSpecial?
End Sub

我目前无法弄清楚如何使用VBA将InlineShape对象保存为jpg图像。如果我手动操作,我可以简单地右键单击图片并选择"另存为图片"。

您可以使用以下代码在Word VBA中保存内联形状:

Private Sub saveImage(shp As InlineShape, path As String)
Dim s As String
Dim i As Long
Dim j As Long

Dim r As Range

Set r = shp.Range.Duplicate
r.start = r.start - 1
r.End = r.End + 1

''shp.range.WordOpenXML does not always contain the binary data
''s = shp.Range.WordOpenXML

s = r.WordOpenXML

i = InStr(s, "<pkg:binaryData>") + 16

If i = 16 Then
MsgBox "No binary data found"
Exit Sub
End If

j = InStr(i, s, "</pkg:binaryData>")

s = Mid$(s, i, j - i)


Dim DecodeBase64() As Byte
Dim objXML As Object 'MSXML2.DOMDocument
Dim objNode As Object 'MSXML2.IXMLDOMElement
Set objXML = CreateObject("MSXML2.DOMDocument")
'create node with type of base 64 and decode
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.Text = s
DecodeBase64 = objNode.nodeTypedValue
Set objNode = Nothing
Set objXML = Nothing
Open path For Binary As #1
Put #1, 1, DecodeBase64
Close #1
End Sub

有关更多信息,请参阅将InlineShape图片保存到Word VBA中的文件。

最新更新