# Changelog ## [v1.5.0] - 2026-06-06 ### ✨ 功能新增 - **F009 MAP→List 使用 balllist 模板**:`run_map_to_list()` 改查 `BallList-Template.xlsx`,不再共用旧模板 - **F010 List→MAP 使用 ballmap 模板**:`run_list_to_map()` 改查 `BallMAP-Template.xlsx`,模板完全分离 - **F011 模板格式提取式应用**:从模板的 cellXfs/fonts/borders/fills 提取实际样式定义,替换硬编码边框和对齐;无模板时完全回退到默认样式 - **F012 验证+回归测试**:新增 `test_f012_pinname_position()` 验证下边 Name 在 max_row-1、上边 Name 在 min_row+1,添加 5×5 往返一致性测试 ### 🗑️ 废弃 - `_find_template_path()` (PinMAP-Template.xlsx) — 不再自动查找,由 `_find_balllist_template_path()` 和 `_find_ballmap_template_path()` 替代 ### 📝 文档 - 更新 `docs/tasks.md` T015 状态为已完成 - 更新 `docs/features.md` F009-F012 状态 ### 🔧 修改文件 - `Code/src/main.py` — 新增两个模板查找函数,修改两个方向的模板调用 - `Code/src/xlsx_writer.py` — 重写 `_styles_xml()` 支持模板样式提取 - `Code/src/template_reader.py` — 增强 cellXfs 提取(xfId、applyAlignment、wrapText) - `Code/src/test_pinmap.py` — 新增 F012 回归测试 ## [v1.3.15] - 2026-06-01 ### 🐛 Bug 修复 - **pinmap_layout.py**: 周长公式从 `2(rows+cols)−4` 改为 `(rows+cols)×2` — 修复角点共享策略,每条边独立包含其端点 - **pinmap_generator.py**: 角点单元格写入 `"6/7"` 格式 — 修复 v1.3 下角点引脚丢失问题 - **pinmap_parser.py**: 读取时包含角点,按 `"/"` 拆分解析多引脚序号 — 修复 roundtrip 丢失引脚问题 ## [v1.2.0] - 2026-05-26 ### 🐛 Bug 修复 - **run.bat**: `cd /d "%~dp0src"` → `cd /d "%~dp0Code\src"` — 修复 cd 路径报错 - **run.bat**: `chcp 65001` 末尾添加 `>nul` — 修复 title 中文乱码 - **run.bat**: `mode con lines=20` → `lines=50` — 修复 Log 窗口无法上滑 - **Code/src/file_selector.py**: `.strip()` 后增加 `.strip('"\'')` — 修复拖拽文件路径带引号导致不存在 ## [v1.0.1] - 2026-05-25 ### 📝 文档完善 - 新增 `Code/docs/README.md` — 项目完整说明文档(8.1KB) - 新增 `Code/docs/QUICKSTART.md` — 快速入门指南(6.6KB) - 新增 `Code/docs/RELEASE.md` — 版本发布说明(5.1KB) - 完善项目文档体系,覆盖架构设计、快速上手、版本历史 ## [v1.0.0] - 2026-05-25 ### 🎉 首次发布 #### 功能 - **PinMAP 解析**:支持方形/长方形封装,左上角为 1 脚,逆时针排序 - **格式支持**:兼容 `.xls`(BIFF8 引擎)和 `.xlsx` 两种 Excel 格式 - **智能验证**:自动检测重复引脚、间隙、空单元格等结构问题 - **PinList 生成**:按顺时针顺序输出引脚序号列表 - **GUI 模式**:支持 tkinter 文件选择器,零命令行使用 - **命令行模式**:`python main.py input.xlsx` 快速转换 #### 技术 - Python 标准库,零第三方依赖 - 自定义 BIFF8 引擎解析 `.xls` 文件(~19KB) - `openpyxl` 读写 `.xlsx` 文件 - 模块化架构:解析 → 验证 → 生成 → 输出 #### 架构 - `main.py` — 入口与流程编排 - `xls_reader.py` — BIFF8 `.xls` 解析引擎 - `xlsx_reader.py` — `.xlsx` 解析器 - `pinmap_parser.py` — PinMAP 结构解析 - `validator.py` — 结构验证与错误检测 - `pinlist_generator.py` — PinList 生成器 - `xlsx_writer.py` — `.xlsx` 输出 - `file_selector.py` — tkinter 文件选择器 - `models.py` — 数据模型 - `utils.py` — 工具函数 #### 测试 - 6 个测试夹具覆盖正常/异常场景 - 测试报告:`Test/test_report.md`