Files
pinmap-to-pinlist/Code/docs/RELEASE.md

16 KiB
Raw Blame History

版本发布说明


v1.5.0 — 2026-06-06

模板分离与格式提取增强

v1.5.0 将两个方向的模板完全分离,并实现了提取式模板格式应用机制,不再依赖硬编码的边框和对齐属性。新增 F012 回归测试确保上/下边 PinName 位置正确。


新增功能

F009MAP→List 使用 BallList-Template独立模板

  • run_map_to_list() 改查 BallList-Template.xlsx
  • 不再共用旧模板 PinMAP-Template.xlsx
  • 新增 _find_balllist_template_path() 查找函数

F010List→MAP 使用 BallMAP-Template独立模板

  • run_list_to_map() 改查 BallMAP-Template.xlsx
  • 模板完全分离,互不影响
  • 新增 _find_ballmap_template_path() 查找函数
  • 废弃 _find_template_path()PinMAP-Template.xlsx

F011模板格式提取式应用

  • 从模板的 cellXfs/fonts/borders/fills 提取实际样式定义
  • 替换之前硬编码的 thin 边框和 center 对齐
  • 支持 xfId、applyAlignment、wrapText 等属性的提取
  • 无模板时完全回退到默认样式Calibri 11pt、thin 边框、居中)

F012上/下边 PinName 位置回归测试

  • 新增 test_f012_pinname_position() 验证下边 Name 在 max_row-1、上边 Name 在 min_row+1
  • 新增 5×5 往返一致性测试PinList → PinMAP 后再解析验证)

修改文件

文件 变更说明
Code/src/main.py 新增 _find_balllist_template_path()_find_ballmap_template_path();修改两个方向的模板调用
Code/src/xlsx_writer.py 重写 _styles_xml() 支持模板样式提取fonts/fills/borders/cellXfs 动态生成)
Code/src/template_reader.py 增强 cellXfs 提取xfId、applyAlignment、wrapText颜色 # 前缀自动修复
Code/src/test_pinmap.py 新增 F012 回归测试 + F011 模板格式提取测试共 12 个测试用例

技术实现

模板查找逻辑

def _find_balllist_template_path() -> str | None:
    """查找顺序:项目根目录 → 当前工作目录"""
    root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    # 1. 项目根目录
    template_path = os.path.join(root_dir, "BallList-Template.xlsx")
    if os.path.isfile(template_path):
        return template_path
    # 2. 当前工作目录
    cwd_template = os.path.join(os.getcwd(), "BallList-Template.xlsx")
    if os.path.isfile(cwd_template):
        return cwd_template
    return None

_find_ballmap_template_path() 同理,查找 BallMAP-Template.xlsx

样式提取式应用

模板 styles.xml
     │
     ▼ 读取字体、填充、边框定义
     ▼ 读取 cellXfs 引用
     ▼ 读取列宽、行高
     │
     ▼ 写入输出 styles.xml
        ├── 模板的 fonts[](替换硬编码默认值)
        ├── 模板的 fills[](透明/灰色填充等)
        ├── 模板的 borders[]thin/medium 边框等)
        └── 4 个 cellXfs序号/名称/封装/空单元格)
             └── 引用模板样式索引
             └── 对齐方式从模板读取而非硬编码

测试覆盖

F012 回归测试

测试用例 说明 结果
test_f012_pinname_position 5×5 构建 → PinMAP 生成 → 验证四边 PinName 位置 → 序列化/反序列化验证

F011 模板格式提取测试

测试用例 说明 结果
test_template_path_generation 两个模板查找函数路径格式
test_f011_default_styles_xml 无模板回退默认样式
test_f011_template_fonts_in_styles_xml 模板字体应用
test_f011_output_dims_determined_by_pins 输出行列由引脚数决定
test_f011_template_borders_in_styles_xml 模板边框应用
test_f011_template_fills_in_styles_xml 模板填充应用
test_template_empty_fonts_fallback 空字体回退
test_template_color_prefix_auto_fix 颜色 # 前缀修复
test_template_no_styles_xml 无 styles.xml 降级

新增测试: 12 个测试用例 总测试: 20 个单元测试 + 6 个集成测试 = 26 个 测试通过率: 100%


已知问题


限制

限制项 说明
模板查找 仅支持项目根目录和当前工作目录两种位置
模板格式 仅支持 .xlsx 格式模板
样式应用 提取式而非复制式,部分高级格式可能丢失

其他限制同 v1.2.0。


升级指南

从 v1.3.x / v1.2.0 升级:替换 Code/src/ 目录下所有文件。模板文件需手动放置:

  • MAP→List 方向:在项目根目录放置 BallList-Template.xlsx
  • List→MAP 方向:在项目根目录放置 BallMAP-Template.xlsx
  • 模板可选,不放置则使用默认样式

贡献者

  • 架构设计Script Architect
  • 编码实现Coding Agent × 3
  • 测试验证QA Agent
  • 文档编写Doc Gen Agent

获取帮助

  • 查看 QUICKSTART.md 了解使用方法
  • 查看 README.md 了解完整说明
  • 查看 architecture-design.md 了解技术细节
  • 查看 CHANGELOG.md 了解变更历史
  • 查看 Test/test_report.md 了解测试详情

v1.2.0 — 2026-05-28

新增 PinList → PinMAP 反向转换

v1.2.0 为项目增加了完整的反向转换能力PinMAP ↔ PinList 现在可以双向互转。


新增功能

PinList → PinMAP 转换

  • PinList 解析:从 Excel 文件中读取 PinNameA 列)和 Pin 序号B 列)
  • 布局计算:根据用户输入的行数和列数,自动计算四边引脚分配
  • 逆时针分配:左上角为 1 脚,沿左边→下边→右边→上边逆时针排列
  • PinName 定位:自动计算 PinName 与序号的相对位置(右/上/左/下)
  • 周长验证:检查引脚总数是否匹配 2×rows + 2×cols 4
  • 优雅降级:缺失 PinName 自动设为 "NC"

模板样式引擎

  • 样式提取:从模板 xlsx 文件中提取字体、填充、边框、列宽、行高
  • 样式应用:将模板样式应用到生成的 PinMAP 输出文件
  • 优雅降级:模板不存在或解析失败时自动使用默认样式

交互式方向选择

  • 启动菜单:运行 python main.py 显示方向选择1: MAP→List / 2: List→MAP
  • 尺寸输入List→MAP 模式需要输入 PinMAP 的行数和列数
  • 文件选择:根据方向自动切换文件选择器标题和提示

数据验证增强

  • PinList 验证序号连续性、序号唯一性、周长匹配、PinName 完整性
  • 非 4 倍数提示Pin 数量不是 4 的倍数时提示(信息级别)

新增模块

模块 代码量 说明
pinlist_parser.py ~80 行 PinList 文件解析A/B 列读取 + 排序)
pinlist_validator.py ~90 行 PinList 数据验证(连续性/唯一性/周长匹配)
pinmap_generator.py ~70 行 PinMAP 生成与输出(布局应用 + 样式)
pinmap_layout.py ~100 行 PinMAP 布局计算(四边分配 + 坐标计算)
template_reader.py ~170 行 模板样式提取fonts/fills/borders/cols/rows

更新模块

模块 变更说明
main.py 增加 run_list_to_map() 流程 + 方向选择菜单
file_selector.py 增加 mode 参数,支持 "map_to_list" / "list_to_map"
models.py 新增 PinListEntryEdgePinsPinMAPLayoutLayoutError
xlsx_writer.py 增加 write_xlsx_with_style() 支持模板样式写入
validator.py 新增 PinMapValidator 类,统一验证接口

技术实现

布局算法

总引脚数 = 2 × rows + 2 × cols  4

左边:   rows 个引脚(从上到下)
下边:   cols  1 个引脚(从左到右)
右边:   rows  2 个引脚(从下到上)
上边:   cols  1 个引脚(从右到左)

坐标映射

左边:   序号 (r, 0)      → Name (r, 1)          右侧
下边:   序号 (rows, c)   → Name (rows-1, c)     上方
右边:   序号 (r, cols)   → Name (r, cols-1)     左侧
上边:   序号 (1, c)      → Name (2, c)          下方

模板样式提取

xl/styles.xml:
  ├── fonts:    name, size, bold, italic, color
  ├── fills:    pattern_type, fg_color
  ├── borders:  top, bottom, left, right (style + color)
  └── cellXfs:  numFmtId, fontId, fillId, borderId, alignment

xl/worksheets/sheet1.xml:
  ├── cols:     column width (min, max, width)
  └── sheetData: row height

测试覆盖

单元测试8 个用例)

用例 测试内容 结果
test_4x4_parse 4×4 方形 PinMAP 解析
test_4x4_validate 4×4 方形验证
test_missing_names_warning PinName 缺失警告
test_duplicate_numbers 序号重复检测
test_gap_in_numbers 序号不连续检测
test_empty_cells 空单元格处理
test_no_pins 无引脚数据检测
test_12pin_square 12 引脚方形解析

集成测试6 个用例)

用例 输入文件 测试内容 结果
TC001 sample_4x4.xlsx 标准 4×4 转换8 Pin
TC002 sample_rect.xlsx 长方形转换13 Pin
TC003 error_gap.xlsx 序号不连续检测
TC004 error_dup.xlsx 序号重复检测
TC005 warning_missing.xlsx PinName 缺失警告
TC006 error_empty_a1.xlsx A1 为空检测

测试通过率100%14/14


已知问题


限制

限制项 说明
引脚数量 建议 < 1000 引脚(典型封装 < 200 引脚,无压力)
输入格式 仅支持 .xls.xlsx,不支持 CSV/其他格式
输出格式 仅输出 .xlsx,不支持 .xls
工作表 仅处理第一个工作表
公式单元格 仅读取公式的计算结果,不保留公式本身
命令行方向 命令行模式直接传入文件默认走 MAP→ListList→MAP 需交互式选择

未来计划

v1.3.0 — 格式增强(规划中)

  • 支持 .xls 格式输出
  • 保留原始 Excel 的字体和格式MAP→List 方向)
  • 支持多工作表选择

v1.4.0 — 功能扩展(规划中)

  • 批量转换(拖拽多个文件)
  • CSV 格式输出
  • PinMAP 结构可视化预览

v2.0.0 — 架构升级(远期规划)

  • 支持更多封装类型BGA、QFN 等)
  • 插件式解析器架构
  • Web 界面

升级指南

首次使用:直接运行即可,无需升级。

从 v1.0.0 升级:替换 Code/src/ 目录下所有文件。

从 v1.1.0 升级:替换 Code/src/ 目录下所有文件。


贡献者

  • 架构设计Script Architect
  • 编码实现Coding Agent × 3
  • 测试验证QA Agent
  • 文档编写Doc Gen Agent

获取帮助

  • 查看 QUICKSTART.md 了解使用方法
  • 查看 architecture-design.md 了解技术细节
  • 查看 Test/test_report.md 了解测试详情

v1.0.0 — 2026-05-25

🎉 首次发布

这是 PinMAP → PinList 转换器的第一个正式版本,实现了从 Excel PinMAP 到 PinList 的完整转换流程。


新增功能

PinMAP 解析

  • 自动识别方形和长方形封装结构
  • 沿四条边(左→下→右→上)逆时针提取引脚
  • 角点共享处理(按单元格位置去重)
  • 支持 2×2 及以上任意尺寸

数据验证

  • 序号连续性检查:检测 1~N 序列中的间隔
  • 序号唯一性检查:检测重复的引脚序号
  • PinName 完整性检查:检测缺失的引脚名称(警告级别)
  • 结构完整性检查:验证方形区域最小尺寸和 A1 封装信息

PinList 生成

  • A 列 PinNameB 列 Pin 序号
  • 按 Pin 序号递增排序
  • 缺失 PinName 自动设为 "NC"

格式支持

  • .xls 读取BIFF8 引擎OLE2 复合文档解析)
  • .xlsx 读取OOXML 引擎ZIP + XML 解析)
  • .xlsx 写入OOXML 引擎(纯手工构建)

运行模式

  • GUI 模式tkinter 文件选择对话框Windows 推荐)
  • 命令行模式python main.py input.xlsxLinux/Mac 推荐)
  • 自动回退:无 GUI 环境自动切换至命令行模式

技术实现

模块 代码量 说明
xls_reader.py ~400 行 BIFF8 OLE2 解析引擎,支持 SST/LABELSST/NUMBER/FORMULA/RK/MULRK/LABEL
xlsx_reader.py ~80 行 ZIP + XML 解析,支持共享字符串表
xlsx_writer.py ~120 行 OOXML 构建,生成标准 .xlsx 文件
pinmap_parser.py ~100 行 方形边界检测 + 四边引脚提取
validator.py ~60 行 连续性/唯一性/完整性验证
pinlist_generator.py ~40 行 PinList 生成 + NC 默认值
file_selector.py ~35 行 tkinter 对话框 + 命令行回退
main.py ~60 行 流程编排 + 异常处理
models.py ~40 行 数据模型定义
utils.py ~35 行 坐标转换工具

总代码量:约 1000 行(不含注释和空行)
第三方依赖0


测试覆盖

单元测试8 个用例)

用例 测试内容 结果
test_4x4_parse 4×4 方形 PinMAP 解析
test_4x4_validate 4×4 方形验证
test_missing_names_warning PinName 缺失警告
test_duplicate_numbers 序号重复检测
test_gap_in_numbers 序号不连续检测
test_empty_cells 空单元格处理
test_no_pins 无引脚数据检测
test_12pin_square 12 引脚方形解析

集成测试6 个用例)

用例 输入文件 测试内容 结果
TC001 sample_4x4.xlsx 标准 4×4 转换8 Pin
TC002 sample_rect.xlsx 长方形转换13 Pin
TC003 error_gap.xlsx 序号不连续检测
TC004 error_dup.xlsx 序号重复检测
TC005 warning_missing.xlsx PinName 缺失警告
TC006 error_empty_a1.xlsx A1 为空检测

测试通过率100%14/14


已知问题

# 问题 严重性 说明
K1 XLS 读取缺乏真实样本验证 当前测试环境无 .xls 格式测试文件BIFF8 引擎尚未在真实 .xls 文件上验证
K2 无字体/格式保留 输出文件不保留原始 Excel 的字体、颜色、边框等格式信息
K3 仅支持 sheet1 仅读取 Excel 文件的第一个工作表
K4 Linux 无头环境无 GUI 无显示器环境下 tkinter 不可用,需使用命令行模式

限制

限制项 说明
引脚数量 建议 < 1000 引脚(典型封装 < 200 引脚,无压力)
输入格式 仅支持 .xls.xlsx,不支持 CSV/其他格式
输出格式 仅输出 .xlsx,不支持 .xls
工作表 仅处理第一个工作表
公式单元格 仅读取公式的计算结果,不保留公式本身

未来计划

v1.1.0 — 格式增强(规划中)

  • 支持 .xls 格式输出
  • 保留原始 Excel 的字体和格式
  • 支持多工作表选择

v1.2.0 — 功能扩展(规划中)

  • 批量转换(拖拽多个文件)
  • CSV 格式输出
  • PinMAP 结构可视化预览

v2.0.0 — 架构升级(远期规划)

  • 支持更多封装类型BGA、QFN 等)
  • 插件式解析器架构
  • Web 界面

升级指南

首次使用:直接运行即可,无需升级。

从测试版升级:替换 Code/src/ 目录下所有文件。


贡献者

  • 架构设计Script Architect
  • 编码实现Coding Agent × 3
  • 测试验证QA Agent
  • 文档编写Doc Gen Agent

获取帮助

  • 查看 QUICKSTART.md 了解使用方法
  • 查看 architecture-design.md 了解技术细节
  • 查看 Test/test_report.md 了解测试详情