使用cursor和ExcelDNA编写Excel自定义功能插件
前言
本期分享下如何使用Cursor+ExcelDNA编写Excel自定义功能插件
工具准备:
- Cursor
- Visual Studio
Visual Studio 操作
下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux
创建项目
- 运行软件,点击创建新项目

- 搜索DNA,选择
Excel-DNA full featured add-inc#语言版本的模板

如果搜索DNA后没有模板出现,打开powershell终端执行如下
1 | dotnet new install ExcelDna.Templates::1.9.0-alpha3 |
其他版本模板地址:
NuGet Gallery | ExcelDna.Templates 1.8.0
- 命名项目名称,点击创建

修改相关配置
双击项目名称,改第4行net6.0-windows为net462;添加第七行:\

设置解释和项目结构想了解的可以观看快速搭建基于ExcelDna的Excel插件项目进行了解
Visual Studio 中显示代码行号
点击菜单栏中的
工具 (Tools)->选项 (Options)。在弹出的选项窗口中,导航到
文本编辑器 (Text Editor)->所有语言 (All Languages)->常规 (General)。勾选 “行号 (Line Numbers)” 选项。
点击
确定按钮保存设置。
修改代码字体
点击菜单栏中的
工具 (Tools)->选项 (Options)。在选项窗口中,导航到
环境 (Environment)->字体和颜色 (Fonts and Colors)。在 “显示项 (Show settings for)” 下拉列表中,选择 “文本编辑器 (Text Editor)”。
在 “字体 (Font)” 中选择你想要的字体(例如
Consolas、Courier New等)。在 “大小 (Size)” 中输入或选择合适的字号(推荐 10-14 之间,视个人喜好)。
点击
确定保存并应用更改。
Cursor操作
使用Cursor打开刚刚创建的项目,比如路径P:\exceladdin\Exceladdin\Exceladdin,确保这个路径下的目录文件与Visual Studio 右侧的项目文件结构一致。
- 以下展示部分需求求提问。

等它写完后点击接受,回到Visual Studio
- 编译生成xll文件
右键项目点击重新生成,运行结果没有报错,点击执行

之后会自动运行Excel
excel的菜单栏会增加一个自定义功能菜单,菜单里面有创建的批量处理工具模块,模块里面三个工具,点击后出现对应ctp面板,面板里面有添加的功能按钮。

在前期,添加功能的时候可能会出现各种报错,但是在cursor熟悉需求后续添加功能按钮就会很快。
需求提问模式如下:
- 在批量处理模块下再添加xxx工具按钮,点击这个按钮会出现ctp面板,面板里面有xxx按钮,按钮功能如下。。。。
- 在单元格工具ctp面板下再添加xxx按钮,鼠标滑动到按钮提示xxx,按钮功能 如下。。。。
使用编译好的xll文件
- 编译好的xll文件在
项目名\source\repos\ExcelAddin\ExcelAddin\bin\Debug\net462\publish位置

- xll文件的使用方法可以是双击,也可以放到
C:\Users\你的电脑用户名\AppData\Roaming\Microsoft\AddIns目录下

- 打开excel后加载xll文件

后续每次打开excel就会多出一个菜单功能

相比较vba,这样打包编译好的就能在使用功能的时候避免打开vbe窗口再执行的步骤了。
功能展示
工作表工具
- 合并工作表
功能:将一个工作簿下所有工作表合并到一张表中
使用前提:所有表的表头一致

- 拆分工作表
功能:按照某列进行拆分

- 新建表
功能:按照A列的值新建表格并命名

工作簿工具
- 合并工作簿
功能:合并选定工作簿文件中的所有表到一个工作簿中的一个sheet
前提:数据结构一致

- 合并工作簿2
功能:合并选定工作簿文件中的所有表到一个工作簿中的多个sheet,sheet命名格式:工作簿名字_工作表名字
前提:数据结构一致

- 拆分工作簿
功能:将一个工作簿下的所有表另存为工作簿,工作簿命名格式:工作表名字

单元格工具
- 删除行
功能:删除单元格值符号条件的行

删除行功能 - 条件值输入说明
| 匹配类型 | 规则说明 | 条件值示例 | 匹配结果 |
|---|---|---|---|
| 完全匹配 | 单元格值必须与条件值完全相同 | 2026年度 |
只匹配 “2026年度” |
| 包含 | 单元格值包含条件关键字即匹配 | 2026 |
匹配 “2026年度”、”2026-01”、”报告2026版” |
| 通配符 (* 和 ?) | * 代表任意多个字符? 代表单个字符(不区分大小写) |
2026* |
匹配以 “2026” 开头:2026年度、2026-01-01 |
| 正则表达式 | 使用标准正则表达式语法 | ^2026 |
以 “2026” 开头 |
| 数值比较 | 单元格必须是数字 (或可转换为数字的文本) |
>100 |
大于 100 |
<50 |
小于 50 | ||
>=100 |
大于等于 100 | ||
<=50 |
小于等于 50 | ||
==100 |
等于 100 | ||
!=100 |
不等于 100 | ||
10-100 |
在 10 到 100 之间(包含边界) | ||
100 |
等于 100(相当于 ==100) |
实际应用场景示例
| 场景 | 列字母 | 匹配类型 | 条件值 | 说明 |
|---|---|---|---|---|
| 删除包含”2026年度”的行 | A |
包含 | 2026年度 |
删除A列包含”2026年度”的所有行 |
| 删除以”test”开头的行 | B |
通配符 (* 和 ?) | test* |
删除B列以”test”开头的所有行 |
| 删除分数大于90的行 | C |
数值比较 | >90 |
删除C列数值大于90的所有行 |
| 删除年龄在18-60之间的行 | D |
数值比较 | 18-60 |
删除D列数值在18到60之间的所有行 |
| 删除所有空行 | A |
完全匹配 | (留空) | 删除A列为空的所有行 |
| 删除日期格式的行 | E |
正则表达式 | ^\d{4}-\d{2}-\d{2}$ |
删除E列符合日期格式的所有行 |
| 删除不等于100的行 | F |
数值比较 | !=100 |
删除F列数值不等于100的所有行 |
结语
目前只有这七个功能,后期可能还会添加








