Excel开发中能否通过VSTO add-in直接插入content add-in实例?
问题结论
该需求可以实现,无需用户手动通过「插入」选项卡的「我的加载项」入口操作。
具体实现方式
- Excel原生对象模型提供了直接插入内容外接程序(Content Add-in)的接口,不需要通过UI模拟点击的方式实现,核心调用的是
Worksheet.ContentAddIns集合的Add方法。 - 调用前先准备好你开发的Content Add-in对应的清单ID,也就是该外接程序XML清单文件中
<Id>节点标注的GUID值,同时确认该Content Add-in已经完成部署,能在当前用户的「我的加载项」列表中正常查到,否则调用会返回找不到外接程序的错误。 - 直接在VSTO自定义功能区按钮的点击事件中写入调用逻辑即可,参考代码如下:
// 替换为你自己Content Add-in清单内的GUID private const string ContentAddinManifestId = "你的Content Add-in对应ID"; private void CustomRibbonInsertBtn_Click(object sender, RibbonControlEventArgs e) { Worksheet currentSheet = Globals.ThisAddIn.Application.ActiveSheet; // 传入参数依次为:外接程序ID、插入位置距顶部偏移、距左侧偏移、初始宽度、初始高度 var addinInstance = currentSheet.ContentAddIns.Add(ContentAddinManifestId, Top: 3, Left: 2, Width: 650, Height: 450); addinInstance.Visible = true; }
- 如果需要在插入时给Content Add-in传递初始化参数,可以在插入实例后操作
ContentAddin.Settings属性写入自定义值,Content Add-in侧在初始化时读取对应配置即可,不需要额外搭建跨插件通信通道。 - 不建议使用UI自动化模拟点击内置功能区按钮的方案,不同Excel版本、不同语言环境下的内置控件标识存在差异,兼容性极差,很容易出现功能失效的问题。
内容的提问来源于stack exchange,提问作者STHOH
相关产品推荐
相关产品推荐

