上次发完推文后,我又干了两天两夜——这套 ExcelDNA Skill 已经从"工具"变成"武器库"
上一次我给大家展示了 Excel-DNA 插件开发 Skill。文章发出后我没停下来——四天四夜,从 v0.2.8 一口气冲到 v0.2.14。这套 Skill 现在不再是一个"项目生成器",而是集 .NET 全栈能力、VBA 自动化精华、浏览器集成优势于一身的集大成者。
一、上一篇写完,我回头看了一下,远远不够
我十年 Office 开发的终极大招:一个 Skill,让 AI 帮你做出最专业的 Excel 插件
上一篇推文写完,Skill 版本是 0.2.8。当时的状态是:
- 两套基础蓝图(一个完整插件、一个纯函数)
- 四组核心脚本
- 11 篇参考文档
- HandyControl 主题系统
- 基本的测试体系
说实话,作为"入门"可以了,但作为"武器库"——远远不够。
因为我做这套 Skill 的初心不是"帮 AI 搭个架子"。我的初心是:把我在 Office 开发领域十年踩过的所有坑、学到的所有高级技术、验证过的所有最佳实践,全部封进 Skill 里。让一个完全不懂编程的人,借助 AI 就能做出我做了五年才磨出来的那种商业级插件。
抱着这个标准往回看,当时那套 Skill 还缺太多东西了。
于是我又干了四天四夜。
二、两天里我做了什么?一张表看完
| 版本 | 日期 | 核心突破 |
|---|---|---|
| 0.2.9 | 7.4 | 四套进阶蓝图上线:共享缓存重算、WebView2 生命周期、注册管线、工作簿配置状态 |
| 0.2.10 | 7.4 | 本地 Patched Runtime 策略固化 + 人工宿主验收清单 |
| 0.2.11 | 7.5 | 异步模型系统化:公式异步 + 命令异步 + RTD + WPS 异步兜底 |
| 0.2.12 | 7.5 | 工作簿自动化最佳实践落地 + 宿主安全守卫 + 复合数据结构清洗 |
| 0.2.13 | 7.5 | 新增轻量工作簿自动化蓝图,从重型 WebView2 项目中把纯数据能力拆出来 |
| 0.2.14 | 7.5 | 全面清理过时路由,统一蓝图体系口径 |
从 2 套蓝图变成 7+ 套,从 11 篇参考文档变成 26 篇,从基础构建能力扩展为覆盖异步编程、工作簿自动化、实时数据流、WebView2 生命周期管理、共享缓存、注册管线、工作簿配置状态的完整知识工程。
听起来有点抽象,对吧?下面我给你讲几个具体的能力,你就知道这套 Skill 现在有多深了。
三、我把它做成了三个世界的交汇点
如果只用一个词形容现在这套 Skill,就是"集大成者"。
它不只是一个 Excel 插件开发工具。它把三个原本完全独立的领域,整合进了同一个武器库里:
世界一:.NET 独立软件的全套优势
Excel-DNA 底层跑的是完整 .NET。这意味着 Skill 模板现在内置的能力包括:
- 异步编程全套模型:Task
公式异步、ExcelAsyncUtil.Run 并发调度、QueueAsMacro 安全主线程写回、WPS 下的 HostUiDispatcher 兜底——四种异步模式,覆盖从"函数计算不卡界面"到"后台任务完成后自动更新单元格"的全部场景 - 共享缓存 + 联动重算:IObservable 推送缓存修订信号,一张工作表的数据变了,所有引用了它的公式自动联动重算
- 注册管线:ExcelParameterConversion 让用户在单元格里输入文本,后台自动转成强类型对象;FunctionExecutionHandler 统一日志、计时、异常拦截
- 工作簿配置与状态:appsettings.json 负责插件全局配置,CustomXMLParts 负责随工作簿走的业务状态——配置跟机器走,状态跟工作簿走
这些都是正经 .NET 后端开发里才有的概念,现在你的 Excel 插件全都能用。你的插件不是"上个世纪的老古董",而是用最现代 .NET 架构写出来的。
世界二:Excel 环境自动化的 VBA 全部优势——但用 C# 写
我过去十几年主要的工作之一就是用 VBA 操控 Excel 做各种自动化:数据读写、格式处理、批量操作、报表生成。
现在我把这些经验——用 VBA 踩过的每一个坑、验证过的每一条最佳实践——全部用 C# + Excel-DNA 重写了一版,固化成共享模板。
具体来说:
- 批量数组读写:不是逐单元格操作,而是 Range.Value2 一把读、一把写,性能比 VBA 高几十倍
- ListObject 安全重写:先读列 Schema(区分数值/文本/日期/长编号),再按 Schema 写数组,保留公式列不动、保留格式列不动,其他数据列安全重写。这是在 VBA 里写一大堆 if-else 才能做的复杂操作,现在是一行模板代码
- 应用状态保护:ScreenUpdating / EnableEvents / DisplayAlerts / Calculation / StatusBar——五个开关统一保存和恢复,确保你的批量操作不会把 Excel 界面搞得忽闪忽闪
- 宿主安全守卫:任何 Ribbon 按钮、Excel 命令菜单触发之前,先检查宿主是否 Ready、是否在编辑态——避免了"用户正在编辑单元格时点了按钮结果静默失败"这种经典 Bug
- WPS 空白工作簿清理:WPS 启动后自动关闭遗留下来的空白工作簿,这一个细节我在 VBA 里就处理过无数次,现在固化成了可复用模板
这什么意思?你过去用 VBA 写了十年的自动化脚本,那些最精华、最核心的操作逻辑,我现在全部翻译成了 C# + Excel-DNA 的模板。AI 读完 Skill 后自动套用,你不需要重新踩坑。
世界三:浏览器能力直接嵌入 Excel——比做浏览器插件更易推行
这是我特别想强调的一个维度。
之前我做了浏览器插件 Skill,能给 Chrome、Edge 加各种自定义功能。那个方案很强,但它有一个天然的推行障碍:你让用户装一个浏览器插件,很多人不敢装、不会装、公司 IT 政策不让装。
但在 Excel 里嵌入浏览器能力呢?
用户不需要装浏览器插件。他们在 Excel 里打开你的任务窗格——里面就是一个完整的 Chromium 内核网页。你要什么功能,就在这个窗格里跑什么功能:
- 想在 Excel 里直接预览网页上的数据?WebView2 窗格加载页面,数据直接写回 Excel
- 想让 Excel 对接你的企业后台 API?窗格里调接口,结果自动入表
- 想在 Excel 里跑一个 AI 助手?一个 WebView2 窗格就是你的 AI 操作台
我的 Skill 现在把这套 WebView2 生命周期完整覆盖了——插件卸载时怎么清理、Excel 进程退出时怎么区别处理、事件订阅怎么解绑避免内存泄漏、窗格关上下文怎么区分清理策略——这些全封装好了。
你在组织内部推行这个方案的时候,不需要说服任何人"装一个浏览器插件"。因为插件就长在 Excel 里——用户看到的是一个"增强版的 Excel",而不是"在浏览器上装了个奇怪的东西"。 推行阻力比你想象的小一百倍。
四、说点实在的:这四天我踩过的六个坑,每一个都能让你少浪费一天
上面讲的都是"做成了什么"。但我觉得更有价值的,是告诉你"怎么做砸的然后怎么修好的"。
因为这就是 Skill 和"一段提示词"的本质区别:提示词只能让 AI 写出看起来对的代码,而 Skill 里的每一条规则,都是从一个真实的 Bug 里长出来的。
坑一:WPS 下按钮点了没反应——日志说"成功",但单元格纹丝不动
我新增了异步命令的专项蓝图。在 Excel 里跑得飞起,按钮一点,异步写回正常。换到 WPS 个人版上——按钮点了,日志打印 Details=Success,但单元格上什么都没发生。
我盯着日志看了半天,发现一行诡异的数据:
Process=C:\...\office6\et.exe Host=Microsoft Excel
进程路径明明是 WPS 的 et.exe,宿主识别却写着 Microsoft Excel。
根因是项目里宿主判断用的是 ExcelDnaUtil.Application.Name。WPS 为了兼容 Excel,Application.Name 直接返回 "Microsoft Excel"。因为这个误判,命令异步走了 QueueAsMacro(Excel 路径),而 WPS 个人版根本不支持 QueueAsMacro——它需要走 HostUiDispatcher 兜底。
修法:全部改成 ExcelDnaUtil.IsET 判断。 这个属性是我亲手编译 Excel-DNA 源码时加进去的,就是专门为 WPS 适配准备的。改完之后,WPS 下的异步命令全部走通。
坑二:VBA 最佳实践迁移时,模板实例化脚本被 PowerShell 5.1 "咬"了一口
我把 VBA 里十几年积累的工作簿自动化经验——批量数组读写、ListObject 安全重写、应用状态保护——翻译成 C# 共享模板。写完之后跑实例化验证,脚本直接崩溃。
不是业务逻辑问题。是 instantiate_blueprint.ps1 被 PowerShell 5.1 的编码解析"干掉"了。同一个脚本,UTF-8 without BOM 在 PowerShell Core 上正常工作,在 Windows 自带的 PowerShell 5.1 上读到中文注释段落就把后面的语法全吞掉。
修法:所有 .ps1 文件全部重存为 UTF-8 with BOM + CRLF。 这条规则现在写进了 Skill,AI 以后生成任何 PowerShell 脚本都不会再踩这个编码坑。
坑三:Excel 公式字符串在 C# 模板里漏了转义
VBA 迁移的 C# 代码里有一段 Excel 公式——"=TEXT(...)"。在 VBA 里写公式字符串是这个写法,照搬进 C# 模板直接炸。编译报错:Unrecognized escape sequence。
修法:C# 字符串里的双引号必须转义,"=TEXT(...)" 要写成 \"=TEXT(...)\"。修完之后重新实例化、构建、真实 Excel 加载冒烟——全通。
坑四:配置文件落不进 dist 交付包
appsettings.json 和 appsettings.user.json 是配置管理的核心——前者放默认参数,后者放个人私密配置(API Key 之类)。构建脚本 build_addin.ps1 漏掉了把配置文件复制到 dist/files 这一步。用户装完插件发现配置不生效,一脸懵。
修法:在 build_addin.ps1 的产物列表里追加 appsettings*.json。 同时把 appsettings.user.json 加进 .csproj 的 CopyToOutputDirectory,确保构建期就输出到 bin 目录。修完之后跑完整构建链验证,dist 目录下配置文件到位。
坑五:bootstrap 脚本还停留在旧蓝图的硬编码白名单
模板目录已经从 2 套蓝图扩到 7 套,但 bootstrap_project.ps1 的参数校验还写死在旧白名单:ValidateSet("wps-ribbon-ctp", "wps-udf-only")。我想用新蓝图创建测试项目,参数直接报错。
修法:改掉硬编码,让脚本从 templates/project-blueprints 动态读取可用蓝图列表。 顺手把批量验证脚本 verify_blueprints.ps1 也同步改成动态枚举。修完之后 7 个蓝图全部成功实例化并通过 Debug 构建。
坑六:旧版宿主判断代码散落在三个 UDF 蓝图里
wps-udf-live-cache、wps-udf-registration-pipeline、wps-udf-settings-workbook-state 三个专项蓝图里,HostEnvironment 还在用 Application.Name 判断宿主(坑一的同款 Bug),而且 Functions.cs 里塞了大量通用演示函数(HELLO、OPTIONAL、LIVE_CLOCK、HANDLE_CREATE……)——这些跟蓝图要演示的专项能力毫无关系,只会干扰 AI 读代码。
修法:全局搜索 Application.Name 旧写法,逐文件改成 ExcelDnaUtil.IsET;三个 UDF 蓝图里删掉 15+ 个通用演示函数和 4 个辅助类型,只保留蓝图真正需要的核心能力代码。 修改后全局复查,确认"宿主判断旧写法"已清零,且三个 UDF 蓝图的入口代码纯粹聚焦。
六个坑,每一个都是我在真实 WPS 个人版上硬测出来的,没有一个来自"理论上可能会出问题"。 它们现在全变成了 Skill 里的共享模板(HostInteractionGuard、WpsBlankWorkbookCleaner、HostUiDispatcher)和 references 里的固化规则。AI 读完 Skill 后自动避开。
这就是我说的——Skill 不是因为"写得全"才值钱,是因为"写进去的每一条都是从真实事故里总结出来的"才值钱。
五、集大成之后:能力矩阵一览
现在的 Skill 蓝图体系不再是两套"选 A 还是选 B",而是一个可组合的能力矩阵:
| 层级 | 蓝图 | 你得到什么 |
|---|---|---|
| 🏗️ 项目骨架 | wps-udf-only | 最轻的起步:自定义函数 + 日志 + 双宿主安装 |
| 🏗️ 项目骨架 | wps-workbook-automation | Ribbon + 工作簿批量读写 + ListObject 安全重写 |
| 🏗️ 项目骨架 | wps-ribbon-ctp-webview-lifecycle | 完整工作台:Ribbon + CTP + WPF + WebView2 全生命周期管理 |
| ⚡ 专项能力 | wps-async-formula-command | 公式异步 + 命令异步 + RTD 实时流 + WPS 异步兜底 |
| 📦 专项能力 | wps-udf-live-cache | 共享缓存 + 全量/增量同步 + HTTP 数据源 + 联动重算 |
| 🔧 专项能力 | wps-udf-registration-pipeline | 参数自动转换 + 统一日志/计时/异常拦截 |
| ⚙️ 专项能力 | wps-udf-settings-workbook-state | 插件全局配置 + 工作簿级状态持久化 |
这些不是互斥的选项,而是可以任意组合的积木。 先选一个项目骨架,再按需求补一个或多个专项能力——AI 读完对应的原理文档和蓝图模板,自动把能力整合进你的项目。
比如你要做一个"从数据库拉数据到 Excel,能实时刷新,还能在窗格里预览图表"的插件——从 wps-ribbon-ctp-webview-lifecycle 骨架起步,补读 wps-udf-live-cache 做实时刷新,齐活儿。
六、26 篇参考文档:不是说明书,是经验手册
有很多人问过我:Skill 到底和"一段提示词"有什么区别?
我就拿这套 Skill 现在的 26 篇参考文档来说。你来感受一下什么是"经验手册"和"说明书"的差距:
| 说明书会告诉你 | Skill 的参考文档会告诉你 |
|---|---|
| "Excel 支持异步函数" | 异步有三种,公式异步回填单元格值、命令异步修改宿主对象、RTD 持续推送变化数据——WPS 下 QueueAsMacro 可能静默失败,必须用 HostUiDispatcher 兜底 |
| "可以操作 Excel 工作表" | 逐单元格操作是性能杀手,必须用 Range.Value2 一把读一把写;长编号列必须用文本前缀;ListObject 重写时要先读列 Schema 再按 Schema 分类写入,公式列和格式列必须保留不动 |
| "WebView2 可以嵌入窗格" | Excel 退出和插件卸载是两种完全不同的清理路径;事件先解绑再脱离宿主引用;窗格关闭原因必须传到底层决定是 Dispose 还是复用 |
| "HandyControl 支持主题" | 全局主题只能通过 Application.Resources 统一下发,不能在页面级挂 hc:Theme;设计期还要单独挂 DesignTimeResources.xaml 否则 VS 设计器不显示样式 |
每一篇 references 都是"官方文档 + 实测修正 + 踩坑经验 + 可直接复用的规则"四合一。 普通 AI 读官方文档只能写出"能跑"的代码,读完这些 references 能写出"生产级"的代码。
七、这就是工匠精神:不推倒重来,而是一刀一刀削
聊到这里,我想跳出来说一个更大的感受。
很多人做工具,喜欢"推倒重来"。第一版不满意,全部删掉重新做,因为"重新写更快"。
我从来不这么干。
从 v0.1.0 到 v0.2.14,我没推倒过一次。每一次都是在前一版的基础上——加一个蓝图、补一篇文档、修一个隐患、固一条规则。
WPS 下 QueueAsMacro 可能静默失败?不推倒,加一个 HostUiDispatcher 兜底。用户编辑单元格时点按钮没反应?不推倒,加一个 HostInteractionGuard 预检。工作簿自动化代码散落在重型 WebView2 蓝图里?不推倒,拆一个独立的 wps-workbook-automation 骨架出来。
一刀一刀削,一轮一轮磨,一点一点收口。 这是一个匠人的执念:不做外表光鲜的一次性作品,而做经得起反复使用的、持续进化的工具。
24 个版本,26 篇参考文档,7+ 套蓝图模板,5 组 PowerShell 脚本,87 个 HandyControl 文档镜像,34 篇 Excel-DNA 官方资料镜像。
所有这些,我一个文件都没删过重来。每一次迭代都是削掉一点多余、补上一块短板、收拢一处散乱。 就像一个木匠对待自己的工具箱——每一件工具都磨到最顺手,每一个角落都有自己的位置。
八、总结:这不是一个工具,这是一个平台
如果你认真读到这里,你应该能理解我为什么说这套 Skill 现在是一个"集大成者":
| 维度 | 能力来源 | 集成方式 |
|---|---|---|
| .NET 全栈能力 | 异步模型、共享缓存、注册管线、配置管理 | 模板 + 专项蓝图 + references |
| VBA 自动化精华 | 批量读写、ListObject 安全重写、应用状态保护、宿主守卫 | 共享模板自动下发到所有蓝图 |
| 浏览器集成优势 | WebView2 生命周期、窗格关闭策略、事件解绑 | 完整工作台蓝图内置 |
| WPS 深度兼容 | 白名单、固定 ProgId/Guid、异步兜底、空白工作簿清理 | 所有蓝图默认开启 |
| 测试与验收体系 | 开发期 COM 冒烟 + 交付期清单校验 + 人工宿主验收 | 蓝图内置脚本 |
| HandyControl 界面 | 全局主题注入 + 7 色 Accent 预设 + 设计期资源 | 完整工作台蓝图内置 |
它不再是"一个帮你做 Excel 插件的工具"。它是"一个可以在 Excel 里做任何事的平台。"
你用这套 Skill,能做出来的东西包括但不限于:
- 高性能自定义函数库,带参数提示,像原生公式一样用
- 带 Ribbon 菜单的专业 Excel/WPS 插件,带 WPF 任务窗格
- 实时数据仪表盘,数据通过 RTD 推送到单元格,自动刷新
- 企业级工作簿自动化流程,批量读写、格式处理、报表生成
- 内嵌 WebView2 的 AI 操作台,数据在 Excel 和网页之间双向流动
- 对接任意后端 API 的数据桥接器
而这一切——你只需要告诉 AI 你想做什么。
九、免费,但请为工匠精神打赏
这是我的铁原则,一个字没变过:
从 VBA 到 Python 到 .NET 到飞书/WPS 多维表格到浏览器插件到图标到 Excel-DNA——全部免费开放。
不收割韭菜,不贩卖焦虑,不搞知识付费墙。
但这四天四夜的迭代,24 个版本的打磨,从两套基础模板到 7+ 套可组合蓝图加 26 篇经验手册——这些看不到的功夫,就是我对"免费"二字的敬畏。不收钱不代表可以随便做。
你觉得这套匠心值得认可,随喜打赏——没有固定金额,不设付费墙。 打赏是一种认可,不是入场券。
也欢迎加我好友,进入免费社群。 亲手体验一下:一个集 .NET 全栈、VBA 精华、浏览器能力于一身的 Excel 开发平台,让 AI 帮你一句话造出来。
公众号:Excel催化剂 | 微信:190262897 | 承接数据咨询解决方案、软件功能定制、AI编程培训服务

浙公网安备 33010602011771号