我正在使用一个脚本(我没写过)将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
我没有获取图像数据,而是获取文档代码。
提前致谢!
答案 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