- 适配器 i18n 接入(eslint/pmd/sql-lint/stylelint) - Provider 动态注册机制(registry.ts + providers.json + factory 重构) - SetupView 全面重构(setupView.ts 新增 600+ 行) - i18n 消息扩展(messages.ts +210 行) - 规则导入流程优化(import-service / prompt-builder) - 新增 PMD jars 依赖及测试用例
2.3 KiB
2.3 KiB
Excel 多 Sheet 导入设计
1. 背景
当前 ExcelConverter.convert() 仅读取 Excel 文件的第一个 Sheet(workbook.SheetNames[0]),后续 Sheet 被忽略。用户需要导入包含多个 Sheet 的 Excel 文件,将全部规则合并输出。
2. 目标
支持多 Sheet Excel 导入,所有 Sheet 合并为一份 YAML 输出。不改变 RuleConverter 接口签名。
3. 设计
3.1 数据流
用户选择 .xlsx/.xls 文件(多 Sheet)
↓
ExcelConverter.convert()
├── XLSX.readFile → 获取 workbook
├── 遍历 workbook.SheetNames
│ ├── 每个 sheet → sheet_to_json → buildMarkdownTable
│ └── 添加 "## SheetName" 标题分隔
├── 合并为一张大 Markdown 文本
├── 调用 convertContentWithAI(combined, context)
└── AI 返回 YAML(合并所有规则)→ 写入 yamlPath
3.2 变更范围
只改一个文件:src/rules/converters/excel-converter.ts
| 变更 | 说明 |
|---|---|
删除 const sheetName = workbook.SheetNames[0] |
不再只取第一个 Sheet |
新增 buildSheetsMarkdown(workbook) |
遍历所有 Sheet,逐个转 Markdown 表格并拼接 |
修改 convert() 内部 |
调用 buildSheetsMarkdown 替代单 Sheet 逻辑 |
保留 buildMarkdownTable(rows) |
复用现有单 Sheet 转表格函数 |
| 保留错误处理 | try/catch、空 Sheet 校验 |
3.3 合并格式示例
## Sheet1 - 命名规范
| id | severity | description | message |
|----|----------|-------------|---------|
| naming-1 | error | 类名使用 PascalCase | 请修改为 PascalCase |
## Sheet2 - 安全规范
| id | severity | description | message |
|----|----------|-------------|---------|
| security-1 | error | 禁止硬编码密码 | 请将密码移入配置文件 |
3.4 边界处理
- 空 Sheet:跳过(不报错),继续处理其他 Sheet
- 全部 Sheet 为空:报错提示"Excel 工作表中没有数据"
- 不同 Sheet 列结构不同:各自独立转 Markdown 表格,AI 自主理解
- 单 Sheet 文件:行为不变,兼容现有功能
3.5 不涉及变更
setupView.ts:ExcelConverter 已注册,无需改动import-service.ts:convertContentWithAI已存在,无需改动converter.ts:RuleConverter接口不变- 其他 converter:不受影响