Ribbon Editor 一个Excel/Wps自定义工具栏编辑器,需要帮忙测试下

动作开发 · 440 次浏览
湘喑 创建于 17小时29分钟前

https://getquicker.net/Sharedaction?code=d0f8d53b-f181-4402-5498-08dea664900b

无聊写的,自己测试可用,但不知道其他人是否可用,有空闲的哥哥们帮忙测试反馈下。主要用来创建一个新选项卡,创建按钮运行指定的宏,支持xlsm和xlam格式,xlam可以作为加载宏,搭建一个日常使用的个人工具栏。
运行后会弹出前端工具,可以自由创建选项卡、分组、按钮,然后自定义按钮绑定的宏,界面如图,设定好后可以导出配置,也可以点击“选择文件”从已经写入配置的文件中导入配置。设定好后点击“确认生成”会弹出一个文件选择框,选择要注入的xlsm或者xlam文件即可。
生成的WPS界面如下:
当然,按钮绑定的宏是要你自己的工作簿中已有的哈,我这个测试工作簿中的宏如图:
 
功能简介

本动作用于在 ExcelWPS 表格 中快速创建自定义 Ribbon 功能区。通过可视化编辑器设计按钮布局,一键将配置注入到 .xlsm / .xlam 文件中,同时自动修复 VBA 宏签名使其可被按钮正确调用。

使用流程
  1. 打开 Ribbon Editor 前端编辑器
    在浏览器中打开编辑器页面,通过拖拽和点击添加选项卡、分组、按钮
  2. 配置按钮属性
    点击按钮右侧的设置图标,填写宏名称(即工作簿中已有的 VBA Sub 过程名)、选择图标、设置提示文字
  3. 点击「确认生成」
    customUI XML 自动写入剪贴板,提示返回 Quicker
  4. 运行 Quicker 动作
    动作自动读取剪贴板 XML,弹出文件选择对话框,选择目标 .xlsm.xlam 文件
  5. 等待注入完成
    弹窗显示「注入完成」后,重新打开工作簿即可看到自定义功能区
Quicker 动作配置
以下三项设置必须正确配置,否则动作无法运行。动作代码完全自包含,无需依赖任何外部文件。
运行模式
普通模式v2 (Roslyn)
执行线程
后台线程 (STA)

必须添加的 DLL 引用(在 Quicker C# 步骤的「引用」设置中):

/* 添加以下两行 DLL 引用路径 */
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.IO.Compression\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.dll
C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.IO.Compression.FileSystem\v4.0_4.0.0.0__b77a5c561934e089\System.IO.Compression.FileSystem.dll
重点注意事项
宏安全性设置:WPS 和 Excel 默认禁止访问 VBProject。注入前需在「选项 → 信任中心 → 宏设置」中勾选「信任对 VBA 工程对象模型的访问」,否则会提示「Cannot access VBProject」。
工作簿必须关闭:注入时需要独占打开文件,请确保目标文件在 WPS/Excel 中已关闭再运行动作。如果文件被占用,ZIP 写入或 VBA 操作可能失败。
宏名称必须精确匹配:编辑器中按钮的「宏名称」必须与 VBA 模块中的 Sub 过程名完全一致(不区分大小写)。名称不匹配的宏将无法被按钮调用。
自动修改 Sub 签名:动作会自动扫描工作簿中所有模块,将 XML 中引用的宏的签名修改为 Ribbon 回调格式(添加 control As IRibbonControl 参数),支持空参和有参两种情况。已有 IRibbonControl 参数的宏会被自动跳过,不会重复修改。
不创建新模块:动作只在用户已有的模块中原地修改代码,不会创建 RibbonCallbacks 等额外模块,不会影响原有代码逻辑。
不影响其他工作簿:动作只操作用户选择的文件。如果脚本需要新建 COM 实例,处理完成后会自动退出;如果复用已有实例,则不会关闭用户的 WPS/Excel 进程。
超时处理:VBA 注入最长等待 30 秒。超时通常是因为弹出了宏安全性警告窗,需要手动确认后再重试。
VBA 签名自动修改规则

动作会解析 customUI XML 中所有 onAction 属性引用的宏名,在工作簿中找到对应的 Sub 后自动修改签名。修改规则如下:

修改前(原始签名) 修改后(Ribbon 回调签名)
Sub msg1() Sub msg1(control As IRibbonControl)
Sub msg2(s As Long) Sub msg2(s As Long, control As IRibbonControl)
Public Sub ExportData(x As String) Public Sub ExportData(x As String, control As IRibbonControl)
Sub btn1(control As IRibbonControl) 跳过(已有正确签名)

* getLabelgetEnabledgetVisible 等特殊回调不在修改范围内。

📄 支持的文件格式
格式 说明 典型用途
.xlsm 启用宏的工作簿 为单个文件添加自定义功能区
.xlam Excel/WPS 加载项 创建通用加载项,所有工作簿均可使用该功能区
Excel / WPS 兼容性

动作自动检测系统上安装的应用(通过 COM ProgID 注册表判断),无需手动设置。检测优先级:

场景 自动选择
仅安装了 WPS WPS (KET.Application)
仅安装了 Excel Excel (Excel.Application)
两者都已安装 WPS(默认 WPS 优先)
手动指定了 TargetApp 变量 以用户指定为准
如果自动检测不准确,可在 Quicker 中添加一个字符串变量 TargetApp,值设为 WPSEXCEL 来手动覆盖。
🎨 自定义图标说明

按钮默认使用内置图标(通过 imageMso 引用)。如需使用自定义图标,请按以下规范准备:

  • 格式:BMP(推荐)、ICO、PNG
  • 尺寸:16 x 1632 x 32 像素
  • 文件名必须与编辑器中填写的图标名称一致,如 MyIcon.png
  • 存放位置:工作簿同目录下的 icons 文件夹

* 自定义图标需要工作簿中已包含 Ribbon_LoadImage 回调函数才能生效。

? 常见问题

Q:提示「剪贴板中没有有效的 customUI XML 数据」?

请确保先在前端编辑器中点击「确认生成」,看到「已写入剪贴板」提示后再运行 Quicker 动作。不要在两次操作之间复制其他内容。

Q:提示「Cannot access VBProject」?

请开启「信任对 VBA 工程对象模型的访问」。WPS 路径:工具 → 选项 → 安全性 → 宏安全性 → 信任中心设置 → 宏设置。Excel 路径:文件 → 选项 → 信任中心 → 信任中心设置 → 宏设置

Q:按钮点击后没有反应?

请检查按钮的「宏名称」是否与 VBA 模块中的 Sub 名称一致(不含模块前缀)。在 VBA 编辑器中确认该 Sub 已被自动修改为 Sub xxx(control As IRibbonControl) 签名。

Q:注入后原有代码被修改了?

动作仅会在 XML 中引用的宏的签名行追加 control As IRibbonControl 参数,不会修改其他代码。如需恢复原始签名,手动删除参数即可。

Q:提示「VBA 注入超时(30秒)」?

通常是 WPS/Excel 弹出了宏安全性警告弹窗。确认弹窗后关闭,重新运行动作即可。如果持续超时,检查杀毒软件是否阻止了脚本执行。


回复内容
CL 13小时56分钟前
#1

看起来不错 👍

回复主贴