如何将嵌入图像的相对路径分配给ActiveSheet.PageSetup.LeftHeaderPicture.FileName?(涉及IT技术)

3

这里有两个SSCCE的例子:

1.

我通过右键单击“解决方案”->“添加”->“现有项目”->“myPic.jpg”向我的VSTO文档级添加了一张图片。

现在,我正在使用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 类型的参数,我不确定如何检索到我的已嵌入资源的路径...

Q:

如何将图片作为资源(或现有项目)嵌入到我的解决方案中,以便能够在 PageSetup.LeftHeaderPicture.FileName 中使用它?


@rene,当前工作目录为C:\Users\admin\Documents\Visual Studio 2012\Projects\ScreeningTemplate\ScreeningTemplate\bin\Debug,因为我正在调试该项目。 - user2140173
你试图使用 @"Assets\myPic.jpg",是吗? - rene
@rene 是的,我已经尝试过了。仍然出现异常。 - user2140173
我几乎建议使用ProcessMonitor来查看它正在尝试的实际路径。 - rene
2个回答

2

好的,我已经解决了。

将现有项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


1
根据我的经验,将文件添加到项目中会将它们嵌入到您的.exe中。这意味着您无法使用文件路径引用它们。但是您可以读取它们。
如果您希望将文件放置在.exe文件之外,只需将其添加到项目中,然后右键单击它并选择属性。将复制到输出目录属性设置为始终复制。您的文件将被复制到构建文件夹中,具有相同的文件夹结构。现在您可以使用相对路径引用文件。
如果您真的需要从资源文件中获取该图片,则可以将其另存为临时文件(使用Path.GetTempFileName),然后通过文件路径加载它。

糟糕,我删掉了我的上一个评论而不是编辑它...你能给个相对路径语法的例子吗,这样我就不会出现异常了吗? - user2140173
"\Assets\myPic.jpg" - dburner
两者都出现了相同的异常类型。 - user2140173
尝试使用完整路径。使用 Path.GetFullPath,还可以尝试查看这个链接:https://dev59.com/S2cs5IYBdhLWcg3wmlMK - dburner
已经尝试使用Path.GetFullPath。已更新问题,并附上异常的截图。 - user2140173
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接