Назначьте изображение для нижнего колонтитула в файл Excel, а не внешний путь - PullRequest
0 голосов
/ 11 июня 2019

В настоящее время я создаю шаблон с проверкой данных, чтобы иметь выпадающий список с 5 различными именами местоположений.При выборе соответствующего изображения адреса вставляется в нижний колонтитул Excel.Я планирую распространить шаблон, но мне нужно сохранить изображения в файл Excel, потому что текущий путь к файлу не будет работать для других пользователей.

любая помощь высоко ценится

ActiveSheet.PageSetup.LeftFooterPicture.Filename = _
        "X:\Adrian\19.0 Templates\19.1 Test\UK Footer address"

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

У вас есть несколько вариантов вместо использования локальных путей к файлам:

  1. Разместите образы на общем сетевом диске, к которому все пользователи могут иметь доступ.В этом случае вам нужно будет использовать UNC-путь и , а не локальное сопоставление дисков.
  2. Разместите изображения на общедоступном веб-сайте, таком как imgur.Это предполагает, что у пользователя будет доступ к Интернету, но, конечно, вы можете перехватывать ошибки, если это необходимо.Синтаксис для добавления изображения таким образом точно такой же, вы просто используете URL-адрес изображения для свойства Filename.
    Sub f()
    With Sheet1.PageSetup.LeftFooterPicture
        .Filename = "https://i.stack.imgur.com/wc4Ew.jpg"
    End With
    Sheet1.PageSetup.LeftFooter = "&G"
    End Sub
Третий вариант - использовать изображения, встроенные в рабочую книгу, но этот подход более сложный.

Я бы рекомендовал против варианта № 3 в пользу одного из более простых вариантов, описанных выше, но если вы склонны использовать его, то, по-моему, вам нужно это сделать.

  1. Найдите изображение в рабочей книге / листе (это не должно быть слишком сложно, опираясь на его Имя или другие пользовательские свойства / метаданные).
  2. Скопируйте изображение в буфер обмена (например,picture.Select: picture.Copy.
  3. Дамп содержимого буфера обмена в место на компьютере пользователя, которое не так просто, как кажется, и потребует некоторого использования вызовов WinAPI (вероятно, здесь старше ивесьма подробный способ сделать это и здесь - по крайней мере, один более простой, если не немного хакерский способ сделать это, используя класс ChartObject). Дальнейшая сложность изобилует, потому что вы не можете всегдаПредполагается доступ для записи, наличие / расположение специальных папок и т. д., и, как правило, впоследствии вы также хотите очистить / удалить изображения, чтобы не загромождать диск пользователя.
0 голосов
/ 12 июня 2019

Первоначально я неправильно понял вопрос, но оставляю этот ответ на тот случай, если он пригодится другим в будущем.Для справки, я неправильно понял формулировку проблемы:

Я беспокоюсь, что если я создаю изображения верхнего / нижнего колонтитула из локальных файловых путей, эти изображения не будут отображаться при распространении файлакому-то еще.

Это не то, как работают данные верхнего / нижнего колонтитула, вот длинное объяснение.

Я проверил, добавив изображение из пути к файлу, а затем удалив картинку из этого места ("c:\debug\Leftfooter.png").Другими словами, файл не существует по первоначальному пути к файлу.По сути, это должен быть тот же случай, что и у сотрудника с различными сопоставлениями дисков или разрешениями и т. Д.

После повторного открытия файла изображение нижнего колонтитула все еще отображается для меня, даже если оно больше не существует намой жесткий диск:

enter image description here

Если файл больше не существует, как изображение сохраняется в нижнем колонтитуле Excel?

Теперьфайл изображения существует в архиве XLSX .ZIP как xl\media\picture1.png.Таким образом, файл был включен как часть книги Excel, а не как ссылка на внешний объект файла.

enter image description here

Я заметил, что при запросе Sheet1.PageSetup.LeftFooterPicture.Filename возвращаемое значение теперь просто "Leftfooter" (исходное имя файла, без квалификатора path ).

И копатьнемного глубже в лежащем в основе xml, отношение, по-видимому, отображается внутри xl\drawings\_rels\vmlDrawing1.vml.rels, который связан с xl\worksheets\sheet1.xml идентификатором отношения "" rID1 ".

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
    <Relationship Id="rId1" 
      Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" 
      Target="../media/image1.png"/>

...