WilliamSmithEdward/pyVBAanalysis

GitHub: WilliamSmithEdward/pyVBAanalysis

纯 Python 实现的 Excel VBA 静态分析工具,无需打开 Excel 即可检测上百种代码缺陷且坚持零误报。

Stars: 1 | Forks: 0

# pyVBAanalysis 用于 Excel VBA 的静态分析。它读取您的宏,并报告可能的 bug 以及 VBA 编译器会捕获的错误,而无需打开 Excel 或运行任何代码。 将其指向一个工作簿或一组导出的模块文件,它就会返回发现的问题,每个问题都带有准确的行号和通俗易懂的解释。 ## 检查内容 它会查找超过一百种问题,包括: - 类型错误,例如将字符串赋值给 `Long` 或向过程传递了错误的类型。 - 未声明的变量,以及对不存在的过程或成员的调用。 - VBA 编译器拒绝的代码:重复声明、格式错误的语句,或者在 64 位 Office 上缺少 `PtrSafe` 的 `Declare`。 - 可能的运行时失败,例如除以常量零,或因错误转换导致的类型不匹配。 它只有在能够确证问题时才会报告,否则保持静默,因此其输出不会让您淹没在误报之中。 ## 安装 ``` pip install pyvbaanalysis ``` 需要 Python 3.10 或更高版本。无需其他设置。 ## 从 Python 中使用 分析工作簿: ``` from pyvbaanalysis import analyze_workbook for module, problems in analyze_workbook("Budget.xlsm").items(): for p in problems: print(module, p.severity.value, p.code, p.message) ``` 分析单个模块的源码: ``` from pyvbaanalysis import analyze_module source = "Sub Test()\n Dim n As Long\n n = \"oops\"\nEnd Sub\n" for p in analyze_module(source): print(p.code, p.message) ``` 每个结果都包含一个 `code`、一条 `message`、一个 `severity`(`error`、`warning` 或 `information`),以及一个给出源码中字符偏移量的 `span`。 将多个导出的文件放在一起分析,以便解析它们之间的引用: ``` from pyvbaanalysis import analyze_loose_files analyze_loose_files(["Module1.bas", "Sheet1.cls", "UserForm1.frm"]) ``` ## 从命令行使用 ``` pyvbaanalysis Budget.xlsm pyvbaanalysis ./exported_modules --format json pyvbaanalysis Budget.xlsm --only Sheet1 ``` 路径可以是一个工作簿、一个包含导出的 `.bas` / `.cls` / `.frm` 文件的文件夹,或一个单独的文件。当发现问题时,该命令以状态码 1 退出;当代码干净时,以状态码 0 退出,因此可以直接将其接入 CI 检查。 ## 范围 本工具用于分析 Excel VBA。它不会运行宏,也不需要安装 Excel。 不支持 Word 和 PowerPoint。 ## 文档 - [使用指南](docs/usage.md) - [API 参考](docs/api-reference.md) - [诊断目录](docs/diagnostics-catalogue.md) ## 许可证 MIT。详见 [LICENSE](LICENSE)。
标签:Excel, Python, SOC Prime, VBA, 动态分析, 开发工具, 无后门, 逆向工具, 错误基检测, 静态代码分析