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

如何在Office JavaScript插件中调用.NET DLL?

解决Office Online JS插件调用.NET DLL的问题

嘿,作为Office插件开发的新手,我完全懂你想把.NET逻辑和JS插件结合起来的需求!不过得先明确一点:前端JavaScript没法直接调用本地的.NET DLL——因为Office Online插件是运行在浏览器沙箱里的,不能直接访问本地资源或者未暴露的后端代码。下面是具体的实现步骤,帮你搞定这个需求:

第一步:把.NET DLL封装成Web API服务

你需要把DLL里的功能暴露成HTTP接口,这样前端Ajax才能调用。在Visual Studio里可以这么做:

  • 新建一个ASP.NET Web API项目(或者在现有Office插件项目里添加Web API控制器)
  • 引用你的.NET DLL,在API控制器的Action方法里调用DLL的业务逻辑
  • 举个简单的控制器示例:
using System.Web.Http;
using YourDotNetDllNamespace;

public class StockController : ApiController
{
    [HttpPost]
    public IHttpActionResult UpdateStocks(StockData data)
    {
        // 调用你的.NET DLL方法处理业务
        var updateResult = StockProcessingLibrary.UpdateStockRecords(data);
        return Ok(updateResult);
    }
}

第二步:配置跨域(CORS)支持

因为Office Online插件是跨域调用你的Web API,所以必须在Web API项目里启用CORS,否则浏览器会拦截请求:

  • 安装NuGet包:Install-Package Microsoft.AspNet.WebApi.Cors
  • 在WebApiConfig.cs里添加CORS配置:
using System.Web.Http;
using System.Web.Http.Cors;

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // 生产环境建议限制允许访问的域名,这里先用*做测试
        var corsSettings = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(corsSettings);
        
        // 配置API路由规则
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

第三步:修改Office JS插件代码,调用Web API接口

把原来直接调用DLL的逻辑改成调用Web API的Ajax请求,补充完整你的updateStocks函数:

(function () {
    "use strict";

    Office.initialize = function (reason) {
        $(document).ready(function () {
            app.initialize();
            $('#update-stocks').click(updateStocks);
        });
    };

    function updateStocks() {
        // 准备要传给API的业务数据
        var stockRequestData = {
            stockSymbol: "MSFT",
            updateQuantity: 150,
            operationType: "Adjust"
            // 其他你需要的参数
        };

        // 发送Ajax请求调用Web API
        $.ajax({
            url: "https://your-api-deploy-url/api/stock/updatestocks",
            type: "POST",
            contentType: "application/json",
            data: JSON.stringify(stockRequestData),
            success: function (response) {
                // 处理API返回的成功结果
                console.log("股票更新完成:", response);
                Office.context.ui.displayDialogAsync("更新成功!", { height: 150, width: 300 });
            },
            error: function (xhr, status, error) {
                // 处理请求失败的情况
                console.error("更新失败:", error);
                Office.context.ui.displayDialogAsync("更新出错,请稍后重试", { height: 150, width: 300 });
            }
        });
    }
})();

额外注意事项

  • 部署Web API:测试阶段可以用本地IIS Express,正式环境要把API部署到云服务器或者IIS上,确保Office Online能访问到API的公开地址
  • 权限验证:如果API涉及敏感业务,建议添加身份验证(比如Azure AD,Office插件本身支持Azure AD身份验证,能和API的权限体系打通)
  • 安全限制:Office Online插件只允许HTTPS请求,所以你的Web API必须部署在HTTPS环境下,避免请求被拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:50