Excel-DNA Skill 终极形态:一个插件,拿下 .NET 全生态 + Office 全组件
我十年 Office 开发的终极大招:一个 Skill,让 AI 帮你做出最专业的 Excel 插件
一、为什么我一直在做 Office 和浏览器周边的工具?
回看过去这一年,我一共做了八套 Skill:
Skill | 领域 | 能做什么 |
VBA-Excel | Excel 宏 | AI 写 VBA,打包成 xlam 插件,带 Ribbon 带安装脚本 |
Python-dev | Python 桌面工具 | AI 搭环境、写代码、打包成 exe 双击即用 |
dotnet-dev | .NET WPF 桌面 | MVVM 架构 + HandyControl 界面,生成专业桌面软件 |
WPS-dbsheet | WPS 多维表格 | AI 操控表格、脚本、自动化、权限,95% 操作全覆盖 |
feishu-dbsheet | 飞书多维表格 | AI 操作多维表格、自动化插件、OpenAPI 全链路 |
chrome-extension | 浏览器插件 | AI 写插件、自动测试、一键安装进浏览器 |
icon-design | 图标素材 | 全球顶级开源图标库聚合,AI 搜、调、导出 |
ExcelDNA | Excel/WPS 插件 | UDF 函数 + Ribbon + CTP 窗格 + WPF 全栈 |
你看出规律了吗?
全部围绕两个东西:Office 办公软件 和 浏览器。
这不是巧合。这是我作为一个在 Office 开发领域深耕了十年的老兵的判断——
打开电脑,你最常用的软件是什么?Excel、WPS、浏览器。这三样东西,是你每天工作上"物理距离最近、打开频率最高、操作习惯最熟"的工具。
如果新功能直接嵌在这些你天天用的工具里,省掉的是"打开另一个软件 → 切换窗口 → 操作完 → 切回来"的全部摩擦。这就是我一直在说的"最短路径"——让功能长在离你最近的工具上。
但做到这一步,光靠 VBA 够吗?
不够。
二、从 VBA 到 Excel-DNA:一次本质性的技术升级
VBA 是我之前 Skill 体系里 Office 插件开发的唯一方案。它确实好用——原生嵌入、随文件分发、开发简单。
但做了这么多 VBA 项目,我太清楚它的天花板在哪:
VBA 的软肋 | 具体限制 |
自定义函数体验差 | VBA 写的 UDF 没有参数说明、没有函数向导提示,用户不知道每个参数填什么。Excel-DNA 可以带完整的参数描述和 IntelliSense,像原生函数一样用 |
.NET 生态隔离 | VBA 只能用 COM 包装调一点点 .NET,最新 .NET 6/8/11 的能力完全吃不到 |
界面丑陋 | VBA 自带的 UserForm,说好听叫"经典",说难听叫"上世纪的审美" |
无法集成现代前端 | 想在 Excel 里嵌一个 WebView2 网页面板?VBA 做不到 |
跨进程能力弱 | 想自动读取网页内容、操控浏览器、调 Windows API?VBA 写起来要命 |
性能瓶颈 | 大数据量的公式计算,VBA 和 .NET 的性能差几十倍 |
代码保护 | VBA 代码本质上就是明文,只能设个密码,破解太容易 |
而 Excel-DNA,几乎完美解决了以上所有问题。
三、什么是 Excel-DNA?为什么我在众多方案里选了它?
Excel 二次开发有很多技术路线:VSTO、COM Add-in、JavaScript API、VBA、Excel-DNA。
我最后选了 Excel-DNA,原因很简单——它是我能找到的唯一一个,同时在四个维度上都做到极致的选择:
维度一:.NET 语言全覆盖
VSTO 和 COM Add-in 的开发体验非常痛苦——你被锁死在 .NET Framework 4.6.2/4.8 这些老框架上,C# 写了一大堆,想用 record、Span<T>、System.Text.Json 这些新特性?不好意思,不支持。
Excel-DNA 完全不一样。 它支持 .NET 6、.NET 7、.NET 8,甚至最新的 .NET 11。你可以使用 .NET 生态里所有最新、最强大的能力——高性能 JSON 序列化、原生 DI 容器、System.CommandLine 命令行框架……一切 .NET 世界里最好的东西,你都能往 Excel 插件里塞。
这意味着什么?你的 Excel 插件,不再是一个"上世纪的遗产系统",而是可以像做现代后端服务一样,用最前沿的技术栈去构建。
维度二:WebView2 前端集成
这是我最看重的能力之一。Excel-DNA 可以通过 CTP(Custom Task Pane,自定义任务窗格)在 Excel 侧边栏嵌入一个完整的 WebView2 窗口。
这是什么概念?你可以在 Excel 里跑一个完整的网页应用。
想用 Vue/React/Angular 写一个数据看板,嵌在 Excel 侧边栏?可以。想做一个可视化的图表配置器,拖拽选字段,自动生成 Excel 图表?可以。想连接你的内部系统 API,数据直接从线上拉到 Excel?可以。
VBA 做不到的、VSTO 做起来很吃力的,Excel-DNA 在一个窗格里全搞定了。
维度三:自动化能力无上限
因为跑的是完整 .NET,你可以做:
读取网页内容:HttpClient + HtmlAgilityPack,批量抓取、解析、入表
浏览器脚本自动化:通过 WebView2 的 DevTools Protocol,在你自己的插件里操控浏览器
调用任何 REST API:对接 AI 模型、企业内部系统、第三方平台
操作本地文件和数据库:读写本地文件、连接 SQLite/SQL Server,全本地跑
VBA 做这些事,要么干不了,要么代码写得极其痛苦。Excel-DNA 一行 await httpClient.GetAsync() 就解决了。
维度四:本地权限全覆盖
作为桌面插件,Excel-DNA 能调用 Windows 的全部能力:
文件系统读写、注册表操作
Windows API 调用(P/Invoke)
进程管理、服务控制
剪贴板高级操作
多线程并行计算
它不像 Web Add-in 那样被浏览器沙箱限制,也不像 VBA 一样单线程跑。它就是一台装着 .NET 引擎的本地超级客户端,而 Office 只是它的宿主。
唯一不完美的地方:不能跨平台
是的,Excel-DNA 只能在 Windows 上跑。Mac 用户用不了。
但说实话——在 Windows 上的 Office 二次开发领域,我实在找不到比它更强的选择了。
四、如果你做过 VSTO,看完这节你会坐不住
前面说到 VBA 的天花板。但我知道,关注我这个号的读者里,有一部分人已经超越了 VBA——你们在用 VSTO 做 Excel 插件开发。
如果你是这个群体,这一节是专门写给你的。因为看完之后你会发现:VSTO 给你设了太多天花板,而 Excel-DNA 几乎全拆了。
VSTO 开发者最痛的五件事
做过 VSTO 的都懂,以下这些场景你一定经历过:
痛一:部署是噩梦。 你辛辛苦苦写了一个插件,要发给用户。然后你发现——用户电脑上必须先装 VSTO Runtime,Office 版本要匹配,还要用 ClickOnce 或者 MSI 安装包打个半天。用户双击你的安装包,Windows 弹出各种安全警告,装完之后还要去 COM 加载项里勾选启用。一个插件安装,能劝退一半用户。
痛二:你被锁在 .NET Framework 4.x 的监狱里。 VSTO 绑定 Office 自带的运行时,最高就到 .NET Framework 4.8。C# 都出到 13 了,你还在写 2019 年的语法。想用 record 类型?不支持。想用 Span<T> 高性能内存操作?不支持。想用 System.Text.Json 的高性能序列化?不支持。
痛三:自定义函数(UDF)是个伪命题。 VSTO 做插件本质上是一个 COM Add-in,它能操控 Excel 界面和对象模型,但它不支持自定义工作表函数。你想写一个 =MySuperFormula(A1:B10) 让用户在单元格里直接调用?VSTO 做不到。你得绕道用自动化插件(Automation Add-in),那是另外一套完全不同的技术栈,而且功能受限严重。
痛四:用户必须单独安装 VSTO Runtime。 插件本身不大,但它强依赖 VSTO Runtime。普通用户的机器上大概率没装这个东西,你得要么在安装包里附带 Runtime,要么让用户自己去微软官网下载安装。多一道门槛,就多一层劝退。
痛五:RTD 实时数据流完全没概念。 想在单元格里展示实时变动的数据(股价、传感器读数、消息推送)?VSTO 只能靠定时轮询来模拟,又慢又卡。原生的 RTD(Real-Time Data)机制,VSTO 根本不支持。
Excel-DNA 怎么一招一招破掉这些痛点
下面这张表,请做 VSTO 的朋友仔细看:
对比维度 | VSTO | Excel-DNA |
运行时依赖 | VSTO Runtime 安装失败率高,且可能需要管理员权限 | 编译时自带 .NET Runtime,用户无需额外安装 |
自定义函数(UDF) | ❌ 不支持。需另起 Automation Add-in | ✅ 原生支持,高性能 XLL 级函数,用户直接 =MyFunc() |
异步 UDF | ❌ 不支持 | ✅ 原生支持 async Task,函数等待时可自定义提示文案 |
RTD 流式函数 | ❌ 不支持 | ✅ 王牌能力——实时数据推送,时钟、行情、传感器数据直接在单元格里跳动 |
.NET 版本 | 锁死在 .NET Framework 4.x | .NET 6/8/11 随便选,能用最新 C# 语法和新框架 |
部署方式 | COM Add-in,需安装包 + 注册表写入 | XLL 文件,双击 bat 脚本即可安装 |
主线程安全 | 需手动 Control.Invoke | QueueAsMacro 一行搞定,后台任务安全写回 Excel |
并发控制 | 不直接支持 | 内置 SemaphoreSlim 限流,50 个单元格同时调也不炸 |
动态数组 | 不直接支持 | 原生 object[,] 输入输出,完美适配 Excel 动态数组 |
重点展开:三个 VSTO 开发者最会心动的能力
1. RTD 流式函数——VSTO 完全没有的东西
这是 Excel-DNA 相对 VSTO 最不讲武德的能力。RTD(Real-Time Data)允许你写一个函数,让数据自己往单元格里推。
什么意思?你写一个 =LIVE_STOCK("000001"),这个单元格就自动显示实时股价,每秒刷新。你写一个 =LIVE_CLOCK(),单元格里就是一个跳动的时钟。后台跑着的是一个 RTD 服务器,数据源可以是 WebSocket、MQTT 消息队列、串口传感器数据——任何实时流,都能推送到 Excel 单元格。
VSTO 做不到这个。 在 VSTO 里你要实现类似效果,要么用 Application.OnTime 定时轮询(又慢又卡),要么用 COM 事件监听(不稳定且复杂)。而 Excel-DNA 的 RTD 是 OS 级别的原生推送,不用轮询,不卡界面。
2. 异步 UDF——函数计算时,Excel 不再卡死
VBA 和 VSTO 都有的一个体验:如果你写了一个计算很重的自定义函数(比如调 AI 接口分析文本),Excel 整个界面就卡住了——鼠标转圈、无法操作、只能等。
Excel-DNA 的异步 UDF:函数在后台跑,Excel 照常用。函数计算期间,单元格显示"数据加载中……"(文案你可以自己定制),结果回来了自动填入。
50 个单元格同时调用?没问题。Skill 模板里内置了受控并发机制,用 SemaphoreSlim 限制同时请求数,不会把后端接口打爆。

