【问题标题】:Can you get image data from an OLE object in Word using VBA?您可以使用 VBA 从 Word 中的 OLE 对象获取图像数据吗?
【发布时间】:2016-07-10 04:34:33
【问题描述】:

我正在使用脚本(不是我编写的)将 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

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

提前致谢!

【问题讨论】:

    标签: vba ms-word ole


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2021-08-30
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多