您可以使用VBA从Word中的OLE对象获取图像数据吗?

时间:2016-03-23 02:34:09

标签: vba ms-word word-vba ole

我正在使用一个脚本(我没写过)将Word文档转换为XML。只要Word文档的风格一致,一切都很完美。脚本无法处理的一件事是将图像作为OLE对象插入。这些图像被脚本简单地忽略了,而作为非OLE对象定期插入的图像被脚本拾取得很好。

我一直在使用VBA脚本(请参阅下面的部分内容)在转换文档之前清理它。该脚本为文档添加样式,移动一些东西,以及...我正在尝试做的是将OLE图像转换为非OLE图像。

所以我想知道的是:有没有办法迭代文档中的inlineShapes并将OLE图形转换为常规图形,或者有没有办法从OLE对象中获取图像数据并将其粘贴到该文件为PNG。

这就是我的 vba脚本现在所做的事情:

Sub docscrubber()

Dim i  As Integer
Dim total  As Integer
Dim oIshp As InlineShape

total = ActiveDocument.InlineShapes.Count
i = 0
For Each oIshp In ActiveDocument.InlineShapes
    i = i + 1
    On Error Resume Next
    Application.StatusBar = "Progress: " & i & " of " & total
        With oIshp

         oIshp.Range.Copy
         oIshp.Select
         Selection.Paste

        End With
Next oIshp

End Sub

我没有获取图像数据,而是获取文档代码。

提前致谢!

1 个答案:

答案 0 :(得分:1)

由于我不知道哪些OLE服务器链接到这些服务器,甚至可能没有,所以我无法进行明确的测试,但是......

Word中的OLE对象与任何动态信息相同,由字段代码管理。您可以使用Alt + F9打开和关闭字段代码的显示。对于我测试的格式,这些是EMBED字段。

要将字段内容转换为静态内容(将OLE对象转换为图形表示),取消链接字段就足够了。根据您向我们展示的代码,似乎有这样的事情:

For Each oIshp In ActiveDocument.InlineShapes
    i = i + 1
    'On Error Resume Next ' do NOT use this!
    Application.StatusBar = "Progress: " & i & " of " & total
    With oIshp   
       If oIshp.Range.Fields.Count = 1 Then
         oIshp.Range.Fields.Unlink
       End If 
    End With
Next oIshp