
BOM 对比工具
OSHWHub58v1.2.4
对比两个 BOM 文件的差异,支持 CSV/TXT/XLS/XLSX 格式
详情
更改日志
历史版本
评论
BOM 对比工具
OSHWHub58详情
更改日志
历史版本
评论
BOM Compare - BOM 对比工具
中文 | English
嘉立创 EDA Pro 扩展,用于对比两个 BOM(物料清单)文件的差异,以表格形式直观展示变更内容。
功能特性
核心功能
- 多格式支持:CSV、TXT、XLS、XLSX 格式导入
- 智能解析:自动识别文件编码(UTF-8、GBK、GB2312)、表头行、分隔符
- 列名映射:自动匹配常见中英文列名变体,支持手动配置映射关系
- 差异对比:以位号(Designator)为基准,逐列对比并高亮差异
- 差异导航:快速跳转上/下一处差异,支持按类型筛选(新增/缺失/变更/相同)
- 同步滚动:左右面板联动滚动,方便逐行对照
- 导出报告:支持导出对比结果为 CSV/XLSX 格式
交互体验
- 拖拽导入:直接拖拽文件到面板即可加载
- 虚拟滚动:支持上万行 BOM 数据流畅渲染
- 国际化:支持中文/英文界面切换
- 快捷键:Ctrl+D 执行对比、F3/Shift+F3 跳转差异、Ctrl+F 搜索
- 列宽调整:支持拖拽调整列宽,双击列边框自适应内容宽度
- 搜索定位:支持按位号或关键字搜索,快速定位到目标行
- 单元格复制:点击单元格可快速复制内容
- 行联动高亮:鼠标悬停某行时,对侧面板自动高亮对应位号的行
高级功能
- 重复列检测:自动检测并警告重复的位号,避免匹配错误
- 列设置:自定义选择参与对比的列
- 表头差异对比:专门对比两个文件的表头差异
- 详情弹窗:横向对比布局展示元器件详细变更信息
- 实时编辑:编辑数据后实时更新对比结果
- 最近文件记录:记录最近打开的文件路径,方便快速重新加载
界面布局
左右双面板布局,左侧为旧文件,右侧为新文件:
- 顶部:文件操作栏(导入、清空、导出)
- 中间:BOM 数据表格(支持列宽调整、排序、搜索)
- 底部:结果汇总栏(统计相同/差异/新增/缺失行数)
主界面截图
<!-- 截图占位符:主界面空状态 -->
差异高亮
| 颜色 | 含义 |
|---|---|
| 蓝色/青色单元格 | 值在新旧文件中不同 |
| 橙色/黄色整行 | 新文件中多出的元器件 |
| 红色/粉色整行 | 旧文件中存在但新文件中缺失 |
| 无高亮 | 完全一致 |
差异展示截图


开发
环境要求
- Node.js >= 20.17.0
安装依赖
npm install
常用命令
npm run compile # 编译项目
npm run build # 编译 + 打包扩展
npm run lint # 代码检查
npm run fix # 自动修复代码风格
npm run test # 运行测试(watch 模式)
npm run test:run # 运行测试(单次)
项目结构
├── src/ # 扩展入口
│ └── index.ts # 注册菜单,打开 iframe 窗口
├── iframe/ # 主界面(iframe 内嵌页面)
│ ├── index.html # 页面入口
│ ├── styles/ # 样式(CSS 变量、主题、布局、表格)
│ │ ├── variables.css
│ │ ├── theme.css
│ │ ├── layout.css
│ │ └── table.css
│ └── src/
│ ├── main.ts # 初始化入口
│ ├── types.ts # 类型定义
│ ├── locales/ # 国际化资源
│ │ ├── zh-Hans.ts
│ │ └── en.ts
│ ├── core/ # 核心逻辑
│ │ ├── parser/ # 文件解析(CSV、Excel)
│ │ ├── comparator.ts # 对比算法
│ │ ├── column-mapper.ts # 列映射
│ │ ├── column-config.ts # 列配置
│ │ └── exporter.ts # 导出
│ ├── ui/ # UI 组件
│ │ ├── table.ts # 表格组件
│ │ ├── toolbar.ts # 工具栏
│ │ ├── state.ts # 状态管理
│ │ ├── summary.ts # 汇总栏
│ │ ├── dialog.ts # 对话框
│ │ ├── column-settings-dialog.ts # 列设置对话框
│ │ ├── sheet-selector.ts # Sheet 选择器
│ │ ├── drop-zone.ts # 拖拽区域
│ │ ├── editable.ts # 可编辑单元格
│ │ ├── loading.ts # 加载状态
│ │ ├── tooltip.ts # 提示框
│ │ ├── column-resize.ts # 列宽调整
│ │ └── layout.ts # 布局
│ └── utils/ # 工具函数
│ ├── i18n.ts # 国际化
│ ├── encoding.ts # 编码检测
│ ├── hotkeys.ts # 快捷键
│ └── storage.ts # 本地存储
├── tests/ # 测试用例及样本数据
│ ├── comparator.test.ts
│ ├── csv-parser.test.ts
│ └── data/ # 测试样本数据
├── locales/ # 扩展菜单国际化
│ ├── zh-Hans.json
│ ├── en.json
│ └── extensionJson/ # 扩展注册菜单翻译
│ ├── zh-Hans.json
│ └── en.json
├── docs/ # 文档
│ ├── prd.md # 产品需求文档
│ ├── features.md # 功能需求文档
│ ├── dev-plan.md # 开发计划
│ └── easyeda-iframe-bug-workaround.md
├── config/ # esbuild 构建配置
│ ├── esbuild.common.ts
│ └── esbuild.prod.ts
├── build/ # 打包脚本
│ └── packaged.ts
├── images/ # 图片资源
│ └── logo.png
├── dist/ # 编译输出(gitignore)
├── extension.json # 扩展配置
├── package.json # 项目依赖和脚本配置
├── tsconfig.json # TypeScript 编译配置
├── vitest.config.ts # Vitest 测试配置
└── eslint.config.mjs # ESLint 代码检查配置
技术栈
- TypeScript(strict 模式)
- esbuild(构建)
- Vitest(测试)
- xlsx / papaparse / jschardet(文件解析)
- @jlceda/pro-api-types(EDA 扩展 API)
使用方式
快速开始
- 安装扩展后,在嘉立创 EDA Pro 的首页、原理图编辑器或 PCB 编辑器的顶部菜单中点击 BOM Compare 即可打开
- 点击左侧面板的「导入」按钮,选择旧版本的 BOM 文件
- 点击右侧面板的「导入」按钮,选择新版本的 BOM 文件
- 点击「执行BOM比对」按钮,或使用快捷键 Ctrl+D
- 查看对比结果,使用差异导航按钮快速定位变更
详细使用步骤
步骤 1:加载文件
- 方式一:点击「导入」按钮,从文件选择器中选择 BOM 文件
- 方式二:直接将文件拖拽到对应的面板区域
支持的文件格式:
- CSV (.csv)
- TXT (.txt)
- XLS (.xls)
- XLSX (.xlsx)
步骤 2:配置列映射(如需要)
如果文件列名无法自动匹配,系统会弹出列映射配置面板:
- 左侧显示源文件的列名
- 右侧选择对应的标准列名
- 可选择「忽略该列」
- 配置会自动保存,下次加载相同格式文件时自动应用

步骤 3:执行对比
- 点击「执行BOM比对」按钮,或使用快捷键 Ctrl+D
- 系统会以位号(Designator)为基准进行对比
- 默认对比所有列,可在列设置中自定义
步骤 4:查看结果
- 底部汇总栏显示统计信息:相同、差异、新增、缺失的行数
- 使用「上一处差异」/「下一处差异」按钮快速跳转
- 使用筛选器按类型查看:全部/仅差异/仅新增/仅缺失/仅相同
- 点击行末的「详情」按钮查看横向对比详情
步骤 5:导出报告
- 点击「导出」按钮导出当前 BOM 数据
- 点击「导出报告」生成包含变更摘要和详细差异的报告
常见问题
Q: 支持哪些文件格式?
A: 支持 CSV、TXT、XLS、XLSX 格式。系统会自动识别文件编码(UTF-8、GBK、GB2312)。
Q: 如何对比两个不同列名的 BOM 文件?
A: 系统会自动匹配常见的中英文列名变体。如果自动匹配失败,您可以手动指定对应关系。
Q: 对比基准是什么?
A: 以位号(Designator)作为对比基准。系统会根据位号匹配左右两侧的行,然后逐列对比其他字段的值。
Q: 如何快速定位差异?
A: 使用「上一处差异」/「下一处差异」按钮,或使用快捷键 F3/Shift+F3。也可以使用筛选器按类型查看。
Q: 导出的报告包含什么内容?
A: 导出报告包含三个 Sheet:变更摘要、差异详情、完整对比。
快捷键
| 快捷键 | 功能 |
|---|---|
| Ctrl+D | 执行 BOM 对比 |
| F3 | 下一处差异 |
| Shift+F3 | 上一处差异 |
| Ctrl+F | 搜索 |
更新日志
查看 CHANGELOG.md 了解版本更新历史。
v1.2.4
优化
- 完成多语言优化
v1.2.3
新增
- 为搜索输入框添加清除按钮,方便快速清空搜索内容
- 扩展语言自动跟随主程序设置,无需手动切换
修复
- 修复语言切换时列宽调整手柄丢失问题
- 修复列宽调整与列名映射功能冲突,扩大调整手柄区域
- 修复表格滚动时文本在表头连接处可见的问题
- 添加 BOM Compare 菜单项的中英文翻译
优化
- 优化详情列文本居中对齐,提升视觉体验
- 优化导出按钮显示逻辑,统一使用 CSS 类控制
- 实现左右表格滚动高度一致性,避免不对称
- 优化表头分割线视觉一致性,消除粗细差异
- 动态计算操作列宽度,适应中英文双语显示
v1.2.2
新增
- 实现全局搜索和筛选功能,支持文本搜索和差异类型筛选
- 文件导入后自动触发搜索/筛选功能
- 差异导航和筛选按钮动态显示/隐藏,清空/导入文件时自动恢复非对比状态
- 筛选模式下也显示高亮效果,提升视觉反馈
- 表头详情按钮条件显示,保持列一致性
- 使第一列(行号列)支持列宽调整
修复
- 实现表头固定功能,预设表头和原始表头在滚动时保持可见
- 修复预设表头操作列 sticky 定位失效问题
- 修复列宽调整功能并优化用户体验
- 修复文本搜索和筛选在对比后的行为不一致问题
- 修复搜索/筛选模式切换时行显示问题
优化
- 优化搜索高亮样式,使用 outline 替换 border
- 优化拖拽区域提示语,删除冗余文字
1.2.1
优化
- 将列名匹配从模糊匹配改为精准匹配,减少误识别
- 优化界面文字颜色对比度,提升深色背景下的可读性
变更
- 为 BOM Compare 菜单项添加省略号,遵循弹窗类型菜单项的 UI 规范
- 修复 comparator.ts 中的 TypeScript 类型错误
- 扩展版本从 v1.2.0 升级至 v1.2.1
1.2.0
新增
- 完善中英文 README 文档,添加详细的功能特性说明
- 新增详细的使用步骤指南,包含快速开始和5步详细操作说明
- 新增常见问题(FAQ)章节,解答用户常见疑问
- 新增快捷键列表,列出所有支持的键盘操作
- 为界面截图预留占位符,方便后续添加实际截图
- 更新项目结构说明,详细列出所有目录和文件
变更
- 扩展版本从 v1.1.0 升级至 v1.2.0
- 更新 .edaignore,允许 README 文件被扩展加载
- 更新扩展 logo 图片
- 删除 docs 文件夹下的开发文档(dev-plan.md、features.md、prd.md、progress.md、easyeda-iframe-bug-workaround.md)
1.1.0
新增
- 添加重复列检测和警告系统
修复
- 修复diff表格列数不一致导致详情列sticky定位失效的问题
1.0.0
初始版本

暂无数据
类型
Other
关键词
ToolBOMCompare
扩展信息
| 版本 | v1.2.4 |
| 发布者 | EasyEDA |
| 发布时间 | 2026-06-16 17:04:31 |
| 名称 | bom-compare |
| UUID | c78c9305280f48c0ad48d53803e7f1b2 |
| 适用EDA版本: | ^3.0.0 |
| 报告 | 报告滥用 |
评论