【问题标题】:VBA(?) How to extract filename of images linked and inserted - Word 2013VBA(?)如何提取链接和插入的图像的文件名 - Word 2013
【发布时间】:2018-05-02 07:20:11
【问题描述】:

我们在 Word 文档 (.docx) 中插入和链接图片(从文件 .emf 插入图片)。我们的文档和图形文件存储在我们的网络驱动器上。然后,我们将我们的文件提供给要处理的作者。文档中的图片对作者很有用。

我如何以编程方式和全局方式(文档明智,而不是批处理文档):提取链接和插入的图片的文件名(不带文件扩展名)?

我们有一个工具可以将 Word 文档 .docx 导出为 .XML。

Ps:我搜索了可能/潜在的 VBA 解决方案。到目前为止,我收集到:

  1. 无法确定/检查图片是否已链接并正确/正确插入到 .docx 中
  2. 无法查看源代码(?至少我试过 Alt+F9 / Shift+F9)

或者macro/vba不是要走的路吗?

规格: 2013 年的话。 64 位 图形格式。电动势 图形和文字文档存储在网络驱动器上 未通过 INCLUDEPICTURE 字段插入和链接的图形。

【问题讨论】:

  • 这些图片是嵌入到文本中还是使用文本换行格式插入的?这会影响如何通过对象模型 (VBA) 或 WordOpenXML 处理它们。 FWIW 默认使用 Word 2013 中引入的图形引擎试图避免使用 IncludePicture - 我认为这是一个错误,但显然有些人发现域代码......令人生畏。
  • 嗨 Cindy,感谢您的提示和帮助我在这里的第一篇文章。图片周围有文字。

标签: vba ms-word word-2013


【解决方案1】:

要获得浮动和内联链接图片的列表,您可以使用如下代码:

Sub Demo()
Dim Shp As Shape, iShp As InlineShape, StrOut As String
With ActiveDocument.Range
  StrOut = "Linked Shapes:"
  For Each Shp In .ShapeRange
    With Shp
      If .Type = msoLinkedPicture Then
        StrOut = StrOut & Chr(11) & Split(.LinkFormat.SourceName, ".")(0)
      End If
    End With
  Next
  If InStr(StrOut, Chr(11)) = 0 Then StrOut = StrOut & " None."
  .InsertAfter vbCr & StrOut
  StrOut = "Linked InlineShapes:"
  For Each iShp In .InlineShapes
    With iShp
      If .Type = wdInlineShapeLinkedPicture Then
        StrOut = StrOut & Chr(11) & Split(.LinkFormat.SourceName, ".")(0)
      End If
    End With
  Next
  If InStr(StrOut, Chr(11)) = 0 Then StrOut = StrOut & " None."
  .InsertAfter vbCr & StrOut
End With
End Sub

请注意,上面的代码只搜索文档正文;不是页眉、页脚等。列表在文档末尾输出。

【讨论】:

    【解决方案2】:

    使用文本环绕格式化的图形属于Shapes 集合。这些不能使用IncludePicture 来管理链接——它们“存在”在与文本和域代码不同的文档层中。因此,访问或管理此信息的唯一方法是通过对象模型(例如 VBA)或通过 Word Open XML。

    对象模型为Shape对象提供LinkFormat属性来查询和管理链接信息。除其他外,还有用于断开链接、获取文件名、文件路径和完整文件信息的属性和方法。

    下面循环文档主体中的所有Shape对象,测试类型是否为链接图片。如果是,则将完整的文件信息分配给sSource

    Sub GetSourceFromLinkedShape()
        Dim shp As Word.Shape
        Dim sSource As String
    
        For Each shp In ActiveDocument.shapes
          If shp.Type = msoLinkedPicture Then
            sSource = shp.LinkFormat.SourceFullName
          End If
        Next
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      相关资源
      最近更新 更多