diff --git a/python/parser.py b/python/parser.py index 6737d44..662709c 100644 --- a/python/parser.py +++ b/python/parser.py @@ -13,10 +13,10 @@ def parse_template(file_path: str) -> dict: for row in ws.iter_rows(): for cell in row: if cell.value and isinstance(cell.value, str): - m = PLACEHOLDER_RE.search(cell.value) - if m: + matches = PLACEHOLDER_RE.findall(cell.value) + for name in matches: placeholders.append({ - "name": m.group(1), + "name": name, "sheet": sheet_name, "cell": cell.coordinate, }) diff --git a/tests/create_fixtures.py b/tests/create_fixtures.py index 671fdc4..0582fa9 100644 --- a/tests/create_fixtures.py +++ b/tests/create_fixtures.py @@ -5,6 +5,7 @@ ws = wb.active ws.title = "Sheet1" ws["B3"] = "{{编号}}" ws["C5"] = "{{姓名}}" -ws["D7"] = "normal_value" # not a placeholder, should NOT be detected +ws["D7"] = "normal_value" # 非占位符,不应被识别 +ws["E9"] = "{{客户名}}和{{编号}}" # 同一单元格内有两个占位符 wb.save("tests/fixtures/sample_template.xlsx") print("fixture created") diff --git a/tests/fixtures/sample_template.xlsx b/tests/fixtures/sample_template.xlsx index c6d220a..9b3092f 100644 Binary files a/tests/fixtures/sample_template.xlsx and b/tests/fixtures/sample_template.xlsx differ diff --git a/tests/python/test_parser.py b/tests/python/test_parser.py index 537fcfb..8a025d3 100644 --- a/tests/python/test_parser.py +++ b/tests/python/test_parser.py @@ -26,3 +26,12 @@ def test_placeholder_has_cell_info(): biaohao = next(p for p in result["placeholders"] if p["name"] == "编号") assert biaohao["sheet"] == "Sheet1" assert biaohao["cell"] == "B3" + +def test_multiple_placeholders_in_one_cell(): + result = parse_template(FIXTURE) + names = [p["name"] for p in result["placeholders"]] + assert "客户名" in names + assert "编号" in names # 已在其他地方存在,但也在 E9 中 + # 验证 E9 中的两个占位符都被检测到 + e9_placeholders = [p for p in result["placeholders"] if p["cell"] == "E9"] + assert len(e9_placeholders) == 2