如何将嵌入图像的相对路径分配给ActiveSheet.PageSetup.LeftHeaderPicture.FileName?
这有2个SSCCE:
1。
我通过右键单击解决方案 – >添加 – >现有项目 – > myPic.jpg将图片添加到我的VSTO文档级加载项。
现在我正在使用Excel电子表格,并希望在左上角标题中添加图片。 使用PageSetup.LeftHeaderPicture.FileName并提供图片的绝对路径,它在调试时加载得很好。
当我试图将路径改为非绝对并且说出类似的东西时
ActiveSheet.PageSetup.LeftHeaderPicture.FileName = "\\Assets\\myPic.jpg"
我一直得到一个HRESULT: 0x800A03EC
exception。
我想我没有获得访问Assets\myPic.jpg
的正确语法。
2。
我添加了一个新资源,选择了一个现有项目并选择了myPic.jpg。 我可以通过Resource1.myPic
访问它,但ActiveSheet.PageSetup.LeftHeaderPicture是只读的 …
PageSetup.LeftHeaderPicture.FileName需要一个string
类型参数,我不知道如何检索我已经嵌入的资源的路径…
问:
如何在我的解决方案中将图片作为资源(或仅仅是现有项目)嵌入,以便能够将其与PageSetup.LeftHeaderPicture.FileName一起使用?
是的,我已经解决了。
在解决方案中添加了现有项myPic.jpg
,并将Build Action
设置为Content
并Copy to Output Directory
以便Copy Always
( 但我相信您可以将其设置为在较新时复制 )
注意: 使用此设置,您的文件将始终“复制”到已发布的目录。
现在您需要的代码就是
ws.PageSetup.LeftHeaderPicture.Filename = AppDomain.CurrentDomain.BaseDirectory + "\\myPic.jpg"; ws.PageSetup.LeftHeader = "&G";
AppDomain.CurrentDomain.BaseDirectory
在这里得到了很好的解释
和预期的最终结果
根据我的经验,将文件添加到项目中会将它们嵌入到.exe
。 这意味着您无法使用文件路径引用它们。 但是你可以阅读它们。
如果您希望将文件放在.exe
文件之外,则只需将其添加到项目中,然后右键单击它并选择属性。 将“ Copy to output directory
属性设置为“ Always copy
。 您的文件将被复制到相同文件夹结构下的构建文件夹中。 现在,您可以使用相对路径引用文件。
如果你真的需要从资源文件中获取该图片,可以将其保存为临时文件(使用Path.GetTempFileName
),然后通过文件路径加载它。