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

Can you get image data from an OLE object in Word using VBA?

我正在使用一个脚本(不是我写的)将 Word 文档转换为 XML。只要 Word 文档的样式一致,一切都会完美无缺。脚本无法处理的事情之一是当图像作为 OLE 对象插入时。这些图像会被脚本简单地忽略,而作为非 OLE 对象定期插入的图像会被脚本很好地拾取。

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

所以我想知道的是:有没有办法遍历文档中的 inlineShapes 并将 OLE 图形转换为常规图形,或者有没有办法从 OLE 对象中获取图像数据并粘贴它以 PNG 格式添加到文档中。

这就是 my 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

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

提前致谢!

因为我不知道哪个 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