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, 动态分析, 开发工具, 无后门, 逆向工具, 错误基检测, 静态代码分析