VBA (?) Как извлечь имя файла из изображений, связанных и вставленных - Word 2013 - PullRequest
0 голосов
/ 02 мая 2018

Вставляем и связываем картинки (вставляем картинку из файла .emf) в наши документы Word (.docx). Наши документы и графические файлы хранятся на наших сетевых дисках. Затем мы предоставляем наши документы авторам для работы. Картинки в документах полезны для авторов.

Как мне программно и глобально (с точки зрения документа, а не с пакетной обработкой документов): извлечь имя файла (без расширения файла) из связанных и вставленных изображений?

У нас есть инструмент, который экспортирует документ Word .docx в .XML.

Ps: я погуглил возможные / потенциальные решения VBA. Пока что я собираю:

  1. нет никакой возможности быть уверенным / проверить, что изображения были связаны и вставлены правильно / правильно в .docx
  2. нет возможности просмотреть исходный код (? По крайней мере я пробовал Alt + F9 / Shift + F9)

Или макрос / vba - это не тот путь?

Характеристики: Слово 2013 64 бит Графический формат. Emf Хранение графических и текстовых документов на сетевом диске Графика не вставлена ​​и не связана через поле INCLUDEPICTURE.

Ответы [ 2 ]

0 голосов
/ 28 мая 2018

Чтобы получить список плавающих и встроенных связанных картинок, вы можете использовать код, подобный следующему:

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

Обратите внимание, что приведенный выше код выполняет поиск только в теле документа; не верхние и нижние колонтитулы и т. д. Списки выводятся в конце документа.

0 голосов
/ 03 мая 2018

Графика, отформатированная с переносом текста, попадает в коллекцию Shapes. Эти не могут использовать IncludePicture для управления ссылкой - они «живут» в другом слое документа, чем коды текста и полей. Таким образом, единственный способ получить доступ к этой информации или управлять ею - через объектную модель (например, VBA) или Word Open XML.

Модель объекта предоставляет свойство LinkFormat для объекта Shape для запроса и управления информацией о ссылках. Среди прочего, есть свойства и методы для разрыва ссылки, получения имени файла, пути к файлу и полной информации о файле.

Следующее зацикливает все 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
...