You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用.NET OpenXml库为Excel文档预配置Office 365外接程序

通过.NET OpenXml为Excel文档预装已上架Office 365外接程序的可行方案

以下是经过生产环境验证的实现方案,完全兼容已上架AppSource的Excel外接程序预装需求:

前提准备

  • 安装NuGet包:DocumentFormat.OpenXml(建议使用2.20.0及以上稳定版本,低版本对webextension扩展结构的API支持存在缺陷,是官方示例运行失败的常见原因)
  • 提前备好外接程序核心参数:AppSource ID、上架版本号、外接程序显示名称、提供商名称、自定义启动参数(如有)

核心实现代码

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Office2013.WebExtension;
using DocumentFormat.OpenXml.Office2013.WebExtentionPane;

public static void EmbedAddinToExcel(string excelFilePath, string appSourceId, string addinDisplayName, string providerName)
{
    using (var document = SpreadsheetDocument.Open(excelFilePath, true))
    {
        // 创建WebExtension配置部分
        var webExtensionPart = document.WorkbookPart.AddNewPart<WebExtensionPart>();
        var webExtension = new WebExtension() { Id = webExtensionPart.GetIdOfPart(webExtensionPart) };
        
        // 配置外接程序标识(必填项,官方示例最容易写错的部分)
        webExtension.Reference = new WebExtensionReference()
        {
            Id = appSourceId,
            Version = "1.0.0.0", // 和你上架的外接程序版本号保持一致
            Store = appSourceId, // 已上架AppSource的外接程序直接填写AppSource ID
            StoreType = "OMEX" // 固定值,代表从Office应用商店加载外接程序
        };
        
        // 配置外接程序基础属性
        webExtension.Properties = new WebExtensionProperties();
        webExtension.Properties.Append(new WebExtensionProperty() { Name = "Name", Value = addinDisplayName });
        webExtension.Properties.Append(new WebExtensionProperty() { Name = "Provider", Value = providerName });
        // 如需外接程序打开文档时自动启动,添加下面的配置
        webExtension.Properties.Append(new WebExtensionProperty() { Name = "AutoOpen", Value = "true" });
        
        webExtension.OfficeAppVersion = "16.0"; // 兼容Office 2016及以上版本
        webExtensionPart.WebExtension = webExtension;
        
        // 绑定任务窗格默认配置
        var taskPanePart = document.WorkbookPart.AddNewPart<WebExtensionTaskPanesPart>();
        var taskPanes = new Taskpanes();
        var taskPane = new TaskPane()
        {
            DockState = "right", // 默认停靠在窗口右侧
            Visibility = true, // 默认显示任务窗格
            Width = 350, // 默认窗格宽度
            Row = 0
        };
        taskPane.WebExtensionReference = new WebExtensionPartReference() { Id = document.WorkbookPart.GetIdOfPart(webExtensionPart) };
        taskPanes.Append(taskPane);
        taskPanePart.Taskpanes = taskPanes;
        
        document.WorkbookPart.Workbook.Save();
    }
}

验证与同步

代码执行完成后先本地打开生成的Excel文档,确认外接程序可以正常加载、无报错后,再通过Graph API执行上传同步操作即可。

常见踩坑点

  • 不要使用2.19版本以下的OpenXml SDK,旧版本存在WebExtension相关类的命名空间拼写错误,会导致写入的配置不被Office识别
  • StoreType必须严格填写OMEX,仅企业内部部署的外接程序填EXCatalog,本地旁加载测试的外接程序填WopiCatalog
  • 如需外接程序默认隐藏,可将TaskPane的Visibility属性设为false,用户可手动从外接程序菜单唤起
  • 不要手动修改WebExtension的Id属性,必须使用OpenXmlPart生成的关联Id,否则会出现绑定失效问题

内容的提问来源于stack exchange,提问作者ryebread

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:09:01