- 适配器 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 依赖及测试用例
66 lines
2.3 KiB
Markdown
66 lines
2.3 KiB
Markdown
# 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:不受影响 |