如何阻止Excel共享运行时加载项信息写入工作簿以避免错误提示?
我开发了一款使用Shared Runtime的Excel加载项,打开加载项后保存工作簿时,工作簿中会被写入加载项信息。将该工作簿发给未安装此加载项的用户时,对方会看到「您没有加载项权限」的错误提示,目前只能通过「信息>检查问题」手动移除加载项信息。
想知道有没有办法移除或阻止加载项信息写入工作簿?微软文档中提到过类似场景(学生用词典加载项编辑Word文档后,不希望同学或老师打开文档时被提示安装加载项)。
我尝试了以下三种方法,但都没生效:
1.
Office.addin.setStartupBehavior(Office.StartupBehavior.none);
Office.context.document.settings.set("Office.AutoShowTaskpaneWithDocument", false); Office.context.document.settings.saveAsync();
Office.context.document.settings.remove('Office.AutoShowTaskpaneWithDocument'); Office.context.document.settings.saveAsync();
问题原因
你尝试的方法都是针对任务窗格自动打开设置的,但Shared Runtime加载项写入工作簿的信息不止这一项——当加载项使用Shared Runtime时,Excel会在工作簿中存储加载项的Runtime绑定标识,这是手动设置启动行为无法覆盖的。
有效解决方案
1. 代码清除已写入的加载项信息
可以通过移除任务窗格固定状态+清除加载项专属配置的方式,彻底删除工作簿中的加载项信息:
// 先移除任务窗格的固定状态 Office.context.document.removePinnedTaskpaneAsync(function(result) { if (result.status === Office.AsyncResultStatus.Succeeded) { // 清除任务窗格自动打开设置 Office.context.document.settings.remove("Office.AutoShowTaskpaneWithDocument"); // 关键:清除Shared Runtime的绑定标识 Office.context.document.settings.remove("Office.Addin.SharedRuntime.Id"); // 保存设置变更 Office.context.document.settings.saveAsync(function(saveResult) { if (saveResult.status === Office.AsyncResultStatus.Succeeded) { console.log("加载项信息已清除"); } }); } });
2. 从根源阻止写入(开发阶段配置)
如果希望加载项从一开始就不向工作簿写入信息,需要在manifest.xml中添加专属配置(仅支持Office 365订阅版/2021及以上桌面版本):
<VersionOverrides xmlns="http://schemas.microsoft.com/office/taskpaneappversionoverrides" xsi:type="VersionOverridesV1_0"> <Hosts> <Host xsi:type="Workbook"> <Runtimes> <Runtime resid="ContosoAddin.Url" lifetime="long" /> </Runtimes> <DesktopFormFactor> <SupportsSharedRuntime>true</SupportsSharedRuntime> <!-- 添加此属性阻止加载项信息写入工作簿 --> <DoNotStoreAddinInfoInDocument>true</DoNotStoreAddinInfoInDocument> </DesktopFormFactor> </Host> </Hosts> </VersionOverrides>
3. 批量清理现有工作簿
如果有大量已写入信息的工作簿,可以用VBA脚本批量处理:
Sub ClearAddinInfo() Dim wb As Workbook Set wb = ActiveWorkbook ' 删除加载项相关的自定义XML部件 Dim xmlPart As CustomXMLPart For Each xmlPart In wb.CustomXMLParts If InStr(xmlPart.NamespaceURI, "officeaddins") > 0 Then xmlPart.Delete End If Next xmlPart ' 删除文档属性中的加载项标识 On Error Resume Next wb.CustomDocumentProperties.Delete "Office.Addin.SharedRuntime.Id" On Error GoTo 0 wb.Save End Sub
注意事项
DoNotStoreAddinInfoInDocument属性仅支持较新版本的Office,旧版本无法生效- 代码清除操作需要在加载项运行时执行,建议在加载项中添加一个「清理加载项信息」按钮,让用户在保存前手动触发
内容的提问来源于stack exchange,提问作者Kashif
相关产品推荐
相关产品推荐

