# Changelog — v1.5.4 > **发布日期**: 2026-06-09 > **版本类型**: Bug 修复版本 ## 🐛 Bug 修复 ### BUG-005 【高】模板文件名错误 **问题**: `main.py` 中引用的模板文件名(`BallList-Template.xlsx` 和 `BallMAP-Template.xlsx`)与用户期望的文件名不匹配。 **修复**: - 模板文件重命名:`BallList-Template.xlsx` → `PinList-Template.xlsx` - 模板文件重命名:`BallMAP-Template.xlsx` → `PinMAP-Template.xlsx` - 同步更新 `main.py` 中的函数名和模板引用路径 ### BUG-006 【高】布局重设计(Number 外侧 + Name 里侧) **问题**: PinList→PinMAP→PinList 双向转换中,v1.3 的"紧致布局"导致 Number 与 Name 单元格冲突(6 处),15×15 网格下序号 1 错位到 A2,序号 16 错位到 B16。 **根本原因**: 旧布局将 Name 放在 Number 向内偏移一行/一列的位置,边角处发生冲突。 **修复方案**: 重新设计布局为 **Number 外侧(第 1 圈)+ Name 里侧(第 2 圈)**,从网格边界往中心排列: | 边 | 外侧(第 1 圈) | 内侧(第 2 圈) | |---|---|---| | **上边** | Number 在 row 1(最顶行) | Name 在 row 2(第二行;角点例外在 row 1) | | **左边** | Number 在 col 0(最左列) | Name 在 col 1(第二列) | | **下边** | Number 在 row rows+3(最底行) | Name 在 row rows+2(倒数第二行) | | **右边** | Number 在 col cols+1(最右列) | Name 在 col cols(右二列) | **关键设计点**: - **上边角点例外**: 最左/最右上边 Name 无法放在 row 2(被左/右边 Name 占用),分别使用 `(1, 0)` 和 `(1, cols+1)` 例外单元格 - Pin1 保持在左上角(A3=1, B3=Pin1) - 不再需要角点 `"//"` 合并 — 每条边不共享任何单元格 - 周长公式 `(rows+cols)×2` 保持不变 **验证**: - ✅ 15 种网格大小(4×4, 15×15, 3×5, 2×2, 8×8, 10×12, 20×20, 5×3, 6×7, 2×3, 3×3, 2×4, 3×2, 4×2, 2×5)全部无冲突 - ✅ 18/18 单元测试通过 - ✅ 37/37 集成测试通过 ## 🔧 修改文件 | 文件 | 修改内容 | |------|---------| | `Code/src/main.py` | BUG-005: 模板函数和引用改名;BUG-006: 传递 cols 参数 | | `Code/src/pinmap_layout.py` | BUG-006: 重写坐标公式 + `get_name_cell()` 支持 cols 参数 + 角点例外 | | `Code/src/pinmap_generator.py` | BUG-006: 传递 cols 参数 + 更新注释 | | `Code/src/pinmap_parser.py` | BUG-006: 重写边界检测、Name 读取(角点例外检测) | | `Code/src/test_pinmap.py` | BUG-006: 更新测试数据适配新布局 | | `Test/fixtures/PinList-Template.xlsx` | BUG-005: 模板文件重命名 | | `Test/fixtures/PinMAP-Template.xlsx` | BUG-005: 模板文件重命名 | ## 📝 文档 - 更新 `CHANGELOG.md` 追加 v1.5.4 版本日志 - 更新 `README.md` 追加 v1.5.4 版本说明 - 生成 `Releases/v1.5.4/CHANGELOG.md` - 更新 `docs/bugs.md` BUG-005、BUG-006 状态为已修复