Как назначить относительный путь встраиваемого образа в ActiveSheet.PageSetup.LeftHeaderPicture.FileName?
Для этого есть 2 SSCCE:
1.
Я добавил изображение в свою надстройку уровня документа VSTO, щелкнув правой кнопкой мыши по решению → добавить → существующий элемент → myPic.jpg.
Теперь я работаю с электронной таблицей Excel и хочу добавить картинку в верхний левый заголовок. Используя PageSetup.LeftHeaderPicture.FileName и предоставляя абсолютный путь к изображению, который он загружает, просто отлично во время отладки.
Когда я пытаюсь изменить путь до не абсолютного и сказать что-то вроде
ActiveSheet.PageSetup.LeftHeaderPicture.FileName = "\\Assets\\myPic.jpg"
Я продолжаю получать исключение HRESULT: 0x800A03EC
.
![enter image description here]()
Я думаю, что я не получаю правильный синтаксис для доступа к Assets\myPic.jpg
.
2.
Я добавил новый ресурс, выбрал существующий элемент и выбрал myPic.jpg. Я могу получить к нему доступ через Resource1.myPic
, но ActiveSheet.PageSetup.LeftHeaderPicture только для чтения...
PageSetup.LeftHeaderPicture.FileName нуждается в параметре типа string
, и я не уверен, как получить путь к моему уже встроенному ресурс...
Вопрос:
Как вставить картинку в мое решение в качестве ресурса (или только существующего элемента), чтобы иметь возможность использовать его с PageSetup.LeftHeaderPicture.FileName?
Ответы
Ответ 1
Правильно, я решил.
Добавил существующий элемент myPic.jpg
к решению и установил Build Action
в Content
и Copy to Output Directory
в Copy Always
(но я уверен, что вы можете установить его для копирования, если он более новый)
![enter image description here]()
Примечание. При этой настройке ваш файл всегда будет "скопирован" в опубликованный каталог.
![enter image description here]()
Теперь все, что вам нужно в вашем коде,
ws.PageSetup.LeftHeaderPicture.Filename =
AppDomain.CurrentDomain.BaseDirectory + "\\myPic.jpg";
ws.PageSetup.LeftHeader = "&G";
AppDomain.CurrentDomain.BaseDirectory
очень хорошо объясняется здесь
и конечный результат, как ожидалось
![enter image description here]()
Ответ 2
По моему опыту добавление файлов в проект будет встраивать их в ваш .exe
. Это означает, что вы не можете ссылаться на них, используя путь к файлу. Однако вы можете прочитать их.
Если вы хотите, чтобы ваш файл размещался за пределами файла .exe
, вы должны просто добавить его в свой проект, затем щелкните его правой кнопкой мыши и выберите свойства. Задайте для свойства Copy to output directory
значение Always copy
. Ваш файл будет скопирован в папку сборки в той же структуре папок. Теперь вы можете ссылаться на свой файл с относительным путем.
Если вам действительно нужно получить эту фотографию из файла ресурсов, вы можете сохранить ее как временный файл (используя Path.GetTempFileName
), а затем загрузить его через путь к файлу.