Files
2026Technology-Competition/docs/superpowers/specs/2026-07-24-excel-multi-sheet-design.md
T
范智鹏 effcf30802 feat: 适配器 i18n + Provider 动态注册 + SetupView 重构 + jars 资源
- 适配器 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 依赖及测试用例
2026-07-28 22:57:15 +08:00

2.3 KiB
Raw Blame History

Excel 多 Sheet 导入设计

1. 背景

当前 ExcelConverter.convert() 仅读取 Excel 文件的第一个 Sheetworkbook.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.tsExcelConverter 已注册,无需改动
  • import-service.tsconvertContentWithAI 已存在,无需改动
  • converter.tsRuleConverter 接口不变
  • 其他 converter:不受影响