feat: SheetDetector 类型识别(名称/表头关键词)

This commit is contained in:
lhl
2026-08-08 16:59:17 +08:00
parent df9427c76e
commit 66753e425d
2 changed files with 72 additions and 0 deletions
+51
View File
@@ -0,0 +1,51 @@
from __future__ import annotations
from typing import Any
from genesis.data_models import SheetType
# Sheet 名关键词(design §3.5.1,顺序即优先级)
NAME_KEYWORDS: list[tuple[str, SheetType]] = [
("機能", SheetType.FUNCTION),
("画面", SheetType.SCREEN),
("帳票", SheetType.REPORT),
("テーブル", SheetType.DATABASE),
("DB", SheetType.DATABASE),
("インターフェース", SheetType.INTERFACE),
("IF", SheetType.INTERFACE),
("バッチ", SheetType.BATCH),
("ジョブ", SheetType.BATCH),
("マスタ", SheetType.MASTER),
("コード", SheetType.MASTER),
]
# 表头关键词
HEADER_KEYWORDS: list[tuple[str, SheetType]] = [
("機能ID", SheetType.FUNCTION),
("画面ID", SheetType.SCREEN),
("帳票ID", SheetType.REPORT),
("テーブルID", SheetType.DATABASE),
("IF名", SheetType.INTERFACE),
("バッチID", SheetType.BATCH),
]
def _name_hit(sheet_name: str) -> SheetType | None:
for kw, st in NAME_KEYWORDS:
if kw in sheet_name:
return st
return None
def _header_hit(matrix: list[list[Any]]) -> SheetType | None:
for row in matrix[:3]:
for cell in row:
if isinstance(cell, str):
for kw, st in HEADER_KEYWORDS:
if kw in cell:
return st
return None
def detect_sheet_type(sheet_name: str, matrix: list[list[Any]]) -> SheetType:
return _name_hit(sheet_name) or _header_hit(matrix) or SheetType.GENERIC