我正在使用 Visual Studio Pro 2022 和 Excel DNA v1.7.0 用 C# 构建 XLL,并带有一系列自定义功能区按钮。
我目前已将所有功能区 XML 作为字符串插入,并作为功能区控制器方法的一部分返回:
public override string GetCustomUI(string RibbonID)
{
return @"
<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
<ribbon>
// XML here
</ribbon>
</customUI>";
}
我目前只是使用现有的 msoImage 图标作为我需要的按钮,作为临时措施,但某些按钮确实需要自定义图像。
我从 Excel DNA 文档中知道这样做是可行的,但找不到任何具体的示例/教程/指南来说明如何做到这一点。我还注意到,大多数现有的 Excel DNA 指南都谈到将此类自定义放入 .dna 文件中,但我的项目中没有 .dna 文件(我认为这是 v1 中 Excel DNA 行为的更改)。 7.0).
所以我想我有两个子问题可以解决将自定义图像放入功能区的根本问题:
我不需要动态加载任何内容 - 这都是一个静态功能区,在启动 Excel 时加载其按钮一次,我希望这应该使事情相对简单?
这是一个解决这两个问题的示例项目:https://github.com/govert/RibbonStart 这篇文章也很有用 - https://github.com/Excel-DNA/Tutorials/tree/master/Fundamentals/RibbonBasics 带有一些相关链接和图像故事,尽管它使用 VB.NET。
它是根据
ExcelDna.Templates
NuGet 包中的“Excel-DNA Full Features Add-in”模板创建的。我不记得如何安装此包以便项目模板出现在 Visual Studio 中。但示例存储库包含您所询问的内容。
要在单独的文件中使用 xml 标记,请将其设置为普通 C# 文件资源,并添加一个将从功能区类的
GetCustomUI
实现中提取和返回的帮助程序。资源管理是标准的 C# 内容。然后,该文件像往常一样包含功能区标记。
对于图像,您需要向
loadImage
标签添加 <customUI>
回调。实现方法有这个签名,以及可能的实现:
public override object LoadImage(string imageId)
{
// This will return the image resource with the name specified in the image='xxxx' tag
return RibbonResources.ResourceManager.GetObject(imageId);
}
您可以从此处返回 .NET 位图,无需像您在某些示例中看到的那样费心
IPictureDisp
。该图像也可能来自 C# 程序集中的资源。 imageId
被放入各个功能区组件中以识别要加载的图像。
无论如何,您应该能够从示例中看到所有这些并从那里开始。