返回作品列表

网友作品 #000210 · 提交于 2026/09/03

VBA代码格式化阅读器:语法高亮折叠排序,兼容IE7

★★★★★业余水平办公智能体国内其他模型python

作品作者

昨夜星辰已逝,满眼青山渐远。业余水平
开发工具
办公智能体
AI 模型
国内其他模型
使用 Skill
python
提交你的作品

作品简介

这是一款纯前端的 VBA 代码格式化与增强阅读器,目标是把粘贴进来、排版杂乱的 VBA 代码实时转换成规范代码和可读视图:统一缩进与关键字大小写,关键字/对象/方法/属性/常量/字符串/注释分色高亮,并支持过程折叠、按关键字排序、清除注释、Debug 输出注释切换与导出自包含 HTML 的完整工作流。最大特点是全面兼容 IE7(ES3/ES5):所有现代 API 均带 polyfill 与手写兼容函数,可直接嵌入老旧的 VBA WebBrowser 控件(默认 IE7 内核)中运行,无需任何服务器或构建步骤。

核心亮点

  • 自动格式化:4 空格缩进并识别 Sub/Function/Property/If/For/Do/With/Select/Type/Enum 等块结构;自动合并续行、拆分冒号连接语句、还原关键字与内置常量的标准大小写、运算符两侧补空格
  • 增强阅读:关键字/对象/方法/属性/常量/字符串/注释 7 类分色高亮,多层括号按 6 色循环「彩虹括号」辅助配对,字符串与注释内的引号不会被误判
  • 结构导航:11 类结构逐层折叠,可全部展开/折叠;按「属性 → 函数 → 过程」分组并按名称字母序重排
  • 注释与调试:只清除过程体内注释、保留模块级注释,或清除全部注释(严格保留字符串内单引号);一键为所有 Debug.Print 行加/去注释前缀
  • 导出与复制:生成内嵌样式与脚本的自包含 HTML,保留高亮与折叠(甚至排序)能力,兼容旧 IE 下载方式;一键复制格式化后的纯文本
  • 旧环境友好:完整 polyfill 与手写 DOM 兼容层(attachEvent 等),界面沿用 VS Code 暗色主题配色

技术与工具

  • 纯前端 HTML/JavaScript,按 ES3/ES5 编写,无服务器、无构建步骤,可离线单文件使用
  • 开发方式:办公智能体工具搭配国内免费 AI 模型

适用场景

  • 在 Excel/Word 等 VBA 宿主的 WebBrowser 控件内直接查看与整理代码
  • 老旧 VBA 工程的维护与交接阅读、企业办公自动化代码的规范化整理
原始提交内容(点开查看,可复制全文去问 AI)

一、工具定位 本工具是一款纯前端的 VBA 代码格式化与增强阅读器,核心目标是把粘贴进来、排版杂乱的 VBA 代码,实时转换为:

统一缩进、统一关键字的规范代码; 带语法高亮(关键字 / 对象 / 方法 / 属性 / 常量 / 字符串 / 注释分色)的可读视图; 支持过程/函数折叠、按关键字排序、清除注释、Debug 输出注释切换、导出自包含 HTML 的完整工作流。 最大特点是全面兼容 IE7(ES3/ES5):所有现代 API 均带 polyfill 与手写兼容函数,可直接嵌入老旧的 VBA WebBrowser 控件(WebBrowser 默认使用 IE7 内核)中运行,无需任何服务器或构建步骤。

二、核心特性一览 分类 功能 说明 格式化 自动缩进 4 空格缩进,识别 Sub/Function/Property/If/For/Do/With/Select/Type/Enum 等块结构 格式化 续行合并 自动合并以 _ 结尾的续行 格式化 行内拆分 将 a: b: c 形式的冒号连接语句拆分为独立行 格式化 大小写规范 关键字、内置常量按官方标准大小写还原(如 dim Dim、vbOK vbOK) 格式化 运算符空格 自动在 = < > <= >= <> + - * / & : 等两侧补空格 只读阅读 语法高亮 关键字/对象/方法/属性/常量/字符串/注释 7 类分色 只读阅读 彩虹括号 多层 () 按 6 色循环着色,便于配对 结构 折叠/展开 按过程、函数、属性、控制块逐层折叠,可全部展开/折叠 结构 过程排序 按「属性 函数 过程(Sub)」分组,组内按名称字母序重排 注释 清除内部注释 仅删除 Sub/Function/Property 体内的注释,保留模块级注释 注释 清除全部注释 删除所有注释行并截断行尾注释(保留字符串内单引号) 调试 Debug 注释切换 一键为所有 Debug.Print 行加/去注释前缀 ’ 输出 导出 HTML 生成内嵌样式+脚本的自包含 .html,保留高亮与折叠能力 输出 复制代码 一键复制格式化后的纯文本到剪贴板 三、功能详解

  1. 自动格式化(formatCode) 合并续行:以 _ 结尾的行与下一行合并为逻辑行。 冒号拆分:splitLineByColon 将 If a Then b: c 之类的冒号连接语句拆成多行(行标签 Label: 不拆分)。 缩进计算:基于 indentDelta 映射与 If…Then 是否独占一行、Else/ElseIf、Case 等规则,逐行推导 4 空格缩进;标签行(Label:)强制 0 缩进;过程声明行重置为 0 并进入层级 1。 默认删除空行(removeBlankLines=true)。
  2. 大小写规范化(beautifyLine) 维护 KEYWORDS 与 CONSTANTS 的全量大写/标准大小写词典,构建 lowerToKeyword / lowerToConst 反向映射。 词法扫描时,对字母数字标识符按小写匹配:命中关键字或内置常量则还原为标准大小写,其余原样保留(变量名不受影响)。 字符串与注释内的文本不参与规范化。
  3. 语法高亮(highlightLine + tokenHighlight) 分 7 类着色: .kw 关键字(蓝)、.obj 对象(青)、.method 方法(黄)、.prop 属性(浅蓝)、.const 常量(绿)、.str 字符串(橙)、.cm 注释(绿斜体)。 数字 .num 单独着色。 在字符串与注释状态机内正确跳过内部单引号/双引号,避免误判。
  4. 彩虹括号(parenHighlight) 对高亮后的 HTML 中、非 HTML 标签内的 ( ) 按嵌套层级取 paren-0 … paren-5 六种颜色循环,辅助快速配对嵌套括号。
  5. 折叠与展开(VbaHighlighter + DOM 折叠) 内置 11 类可折叠结构:Sub / Function / Property / If / For / Do / While / Select / With / Type / Enum。 convertToHtml 递归生成带 fold-body / fold-ellipsis 的 DOM:折叠时显示 … (N 行已折叠) … 占位。 工具栏「展开 / 折叠」按钮批量操作;折叠图标状态与按钮可用状态自动联动(updateButtonStates)。
  6. 过程排序(sortProcedures) 识别所有 Sub/Function/Property 块(含其上方紧邻的注释与空行)。 排序规则:先按类型(Property=0 Function=1 Sub=2),同类型再按名称 localeCompare 字母序。 模块顶部(首个过程之前)的声明/注释保留在开头,过程之间以空行分隔。
  7. 注释清理 removeAllComments:纯注释行整行删除;行尾注释截断;严格区分字符串内单引号(保留)。 removeProcComments:仅作用于过程体内,模块级(过程外)注释原样保留。
  8. Debug 输出注释切换 commentDebugPrint:为所有 Debug.Print 起始行及其续行加 ’ 前缀(已注释过的不重复处理)。 复选框「注释Debug」切换;uncommentDebugPrint 去前缀还原,连带着续行一并还原。
  9. 导出 HTML(btn-export-html) 检测 Blob 支持;不支持则提示用现代浏览器。 生成的 HTML 自包含:内联原样式、polyfill、折叠脚本;若当前未排序,还会内联排序所需的数据与函数,使导出文件也能在浏览器中执行「排序过程」。 导出文件隐藏左栏与分隔条,右栏占满,工具栏固定顶部。 下载兼容旧 IE(window.navigator.msSaveBlob)与现代浏览器(a.download)。
  10. 复制代码(btn-copy-text) 复制格式化后的纯文本(去除多余空行)。 优先 window.clipboardData(IE),其次 navigator.clipboard,失败给出提示。 四、兼容性设计(关键点) ES3/ES5 编写:不使用 const/let、箭头函数、模板字符串、<script type=“module”> 等现代语法。 完整 polyfill:Array.indexOf / filter / forEach、String.trim、JSON(含简化版 stringify)缺失时自动补充。 手写 DOM 兼容层:addEvent(兼容 attachEvent)、getElemByClass / getElemsByClass / getElemsByClassNames、hasClass/addClass/removeClass/toggleClass 等,兼容无 getElementsByClassName 的旧环境。 导出页同样兼容:导出脚本中再次注入上述 polyfill 与兼容函数,保证旧 IE 下折叠/排序仍可用。 样式沿用 VS Code 暗色主题配色,护眼且层次分明。