4、Excel模板设计原则:模板的通用性、可扩展性、可维护性设计思路
做模板这件事,我踩过的坑比你们想象的多。刚开始做ARXML生成时,我总想着一个模板搞定所有项目。结果呢?每次新项目一来,模板就得大改。说白了,那是把模板做死了。
今天聊聊模板设计的三个核心原则。通用性、可扩展性、可维护性。这三个词听起来很虚,但落地到Excel里,其实有章可循。
4.1 通用性:别让模板挑项目
通用性是什么意思?就是你的模板换个项目,换个ECU,换个SWC,照样能用。我见过有人把信号名、端口名直接写死在模板里。嗯,这种模板基本是一次性的。
通用性设计要点:
- 参数化配置:所有项目相关的信息,用参数代替。比如用
{ProjectName}代替实际项目名 - 分层结构:模板只定义结构,不绑定具体数据。数据由用户填写
- 命名规范:用统一的命名规则,别今天用驼峰,明天用下划线
举个例子。我之前做的一个项目,客户要求所有SWC的端口命名必须带模块前缀。我就在模板里加了一列“Prefix”,用户填什么,生成时就拼什么。这样不管什么项目,模板都不用改。
我的习惯:模板里至少留3个自定义字段。你不知道客户会提什么奇怪要求,留点余地总没错。
4.2 可扩展性:给未来留条路
可扩展性,说白了就是别把路走死。你想想看,AUTOSAR版本在升级,客户需求在变,你的模板要是不能加东西,那就得重做。
我曾经遇到一个坑。客户一开始只需要CAN信号,模板只设计了CAN的列。半年后,客户说要加LIN。我一看模板,所有列都是写死的,加一列就得改所有公式。那叫一个痛苦。
避坑指南:我曾经因为没预留扩展列,导致一个模板改了3版。后来我学乖了,每个模块都预留5-10个空列,用“扩展1”、“扩展2”命名。客户有新需求,直接填进去就行。
可扩展性的具体做法:
- 预留列:每个Sheet末尾留5-10个扩展列
- 模块化设计:每个功能模块独立一个Sheet。加功能就加Sheet,不影响已有的
- 版本号管理:模板里加一个版本号单元格。改一次,升一次版本
- 兼容旧数据:新模板要能读旧数据。我一般用VLOOKUP做兼容映射
4.3 可维护性:别让自己看不懂
可维护性,这是最容易被忽视的。你想想,三个月后你回头看自己做的模板,还能一眼看懂吗?
我有个同事,模板做得特别复杂,公式嵌套了七八层。他自己都说不清逻辑。后来他离职了,那模板直接废了,没人敢动。
可维护性设计要点:
- 注释清晰:每个关键单元格加批注,说明用途和取值范围
- 公式拆分:别写长公式。一个公式超过3个嵌套,就拆成辅助列
- 颜色规范:用颜色区分输入区、计算区、输出区。我习惯用黄色表示用户输入,灰色表示公式计算
- 命名区域:给关键区域命名,比如
Input_SignalList,公式里直接用名字,不用记单元格地址
举个例子。我之前做的一个模板,有个公式是计算信号长度的。原来写的是:
=IF(ISBLANK(D2), "", IF(E2="uint8", 8, IF(E2="uint16", 16, IF(E2="uint32", 32, 0))))
后来我改成:
辅助列1: =IF(ISBLANK(D2), "", "有数据")
辅助列2: =IF(E2="uint8", 8, IF(E2="uint16", 16, IF(E2="uint32", 32, 0)))
最终列: =IF(辅助列1="有数据", 辅助列2, "")
虽然多了两列,但逻辑一目了然。别人接手也能看懂。
4.4 三个原则的平衡
这三个原则有时候会打架。通用性太强,模板可能变得臃肿。可扩展性太好,维护成本可能上升。怎么平衡?
我的经验是:以可维护性为底线,以通用性为目标,以可扩展性为弹性。
什么意思?
- 先保证模板自己能看懂,别人也能看懂
- 再尽量让模板适应更多项目
- 最后留点扩展空间,应对突发需求
我的建议:做模板时,想象一下三个月后的自己。如果三个月后的你看到这个模板会骂人,那就说明设计有问题。
4.5 模板设计框架图
下面这张图,是我做模板时的设计框架。你可以参考一下:
4.6 实际案例:一个可维护的模板结构
最后,分享一个我实际在用的模板结构。你可以直接参考:
| Sheet名称 | 用途 | 颜色规范 | 扩展预留 |
|---|---|---|---|
| Config | 项目全局配置,如版本号、ECU名称 | 黄色背景(用户输入) | 预留10行自定义参数 |
| SWC_List | 定义所有SWC及其端口 | 白色背景(数据区) | 预留5列扩展字段 |
| Signal_List | 定义所有信号及其属性 | 白色背景(数据区) | 预留5列扩展字段 |
| Mapping | 信号与端口的映射关系 | 灰色背景(公式计算) | 预留3列辅助计算 |
| Output | 生成ARXML的中间数据 | 灰色背景(公式计算) | 不预留,由公式自动生成 |
这个结构我用了两年,换了四个项目,基本没大改过。每次新项目,只需要改Config Sheet里的参数,其他Sheet自动适配。
小技巧:在Config Sheet里加一个“模板版本”单元格。每次修改模板,更新版本号。这样出了问题,能快速定位是模板问题还是数据问题。
嗯,以上就是我对模板设计原则的理解。说白了,就是别把模板做成一次性用品。留点余地,写点注释,分点模块。这样你省心,别人也省心。
公众号:蓝海资料掘金营,微信deep3321