[英]Save InlineShape picture to file in Word VBA
我正在嘗試使用 vba 從 Word 文檔中提取圖片並將其保存在文件中。
我不太關心 output 格式,只要它是可讀的即可。
圖片與文字對齊,因此是vba中的一個InlineShape
。
我已經嘗試使用ActiveX Data Object Library (ADODB)進行一些操作,請參閱下面的代碼。
Dim oInlineShape As InlineShape, _
ImageStream
Set oInlineShape = ActiveDocument.InlineShapes(1)
Set ImageStream = CreateObject("ADODB.Stream")
With ImageStream
.Type = 1
.Open
.Write oInlineShape.Range.EnhMetaFileBits
.savetofile ActiveDocument.Path & "\image.bmp"
.Close
End With
Set ImageStream = Nothing
無需包含對“ActiveX 數據 Object 庫”的引用。
我沒有指定ImageStream
的類型以避免必須這樣做。
我無法使用 Windows 照片應用程序讀取image.bmp
文件,但我可以將其重新插入到 Word 文檔中或將文件轉換為 jpg(我使用 ImageMagick,但我認為這無關緊要)。
oInlineShape.Select
來理解,只選擇了圖像......我在舊論壇帖子中讀到 vba 代碼可以調用 Windows API 中的函數,因此可以將剪貼板內容粘貼到文件中。
我知道如何將 Shape 或 InlineShape 放入 Word 剪貼板。 但是,我不知道如何使用 vba 連接到 Windows API 以及從中使用什么 function。
非常感謝!!
我找了 20 年但從未找到答案,直到發現 WordXML。
您可以通過調用:saveImage Selection.InlineShapes(1), "C:\tmp\test.png" 來測試確保C驅動器上有一個"tmp"目錄。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.