关于处理企业报表(Excel or FlexCell)的一些思路和心得
前言
在日常工作中我们或多或少就会遇到关于报表的问题,处理的最多的就是和Excel 相关的报表,不同的业务需求使用的报表不一样,尽管市面上有很多成熟的报表设计工具,还提供了开发者版本的库,但往往需要花钱购买,买来还不一定适合自己的业务需求。作为一个有理想的程序员🤡,这时候我们必须是选择自己处理😂。
1、常见报表问题
本文采用的是 C#的一个表格库(
FlexCell
)进行参考演示,提供一种解决问题的思路。至于读者使用那种格式的表格不影响,我们需要学会解决问题思路,就可以解决自己对应的问题了。
在我们工作中可能处理报表数据的方式就是通过表格的坐标来插入对应的数据
,这种方式会出现一下的一些问题。
1.1 设计报表模板
这是一种常见的报表单,在不变的模板中插入数据,使用这种方式可以实现我们的需求,但是如果有一天报表的模板发生变化了该怎么办呢,显示采用这种记录坐标的方式不是最优的解决方案。
1.2 改变模板带来的问题
例如表格模板变成下面这样,意味着我们的代码可能就得发生改变
(当然可能有读者说我们可以将模板坐标放在一个配置文件里面,替换模板同时替换配置文件,这种方法虽然可行,但依然很麻烦,反正我是不会再这样操作的,因为曾经确实这样做过,吃过亏) 。
上图我们的表格模板发送了变化,之前采用坐标的方式就会发生很大的变化,带来新的问题。这个问题给我项目带来很大的困扰。因为行业的问题我们的表格模板会经常发生变化,甲方不同可能模板就会不同。我们这时候就需要设计出一种能解决这个问题的通用模板
2、解决方案
在表格处理中,我们大多数时候可能忘记了还有
表格批注
这个东西,插入批注这个东西是一直绑定在单元格上的,无论表格模板发生什么变化,我们只需要保证批注和我们后台处理的数据对应就能顺利的把数据插入不同模板的表格中
细心的读者可能已经看出来上面模板中带有红色三角的单元格就是加了批注的,如下图:
2.1 解决思路
- 后端数据采用Json 格式 ,(这话数据源也可以改变,并不是固定的)
- 表格设计的批注和json的 key 相对应 。
- 将模板导入自己的系统中,加载渲染出来。
- 遍历表格,当批注和key 相等的时候就说明找到了对应的单元格。
2.2 实现方式
1、准备 json数据,这里为了达到好的演示效果,key 都是中文的方式,实际开发中我们当然的英文优先。
{
"生产型号": "HG67H",
"零件图号": "CDG21",
"零(组)件名称": "滚轴",
"型号(批次)": "BCCDX01",
"类型": "KH01s",
"批次号": "BC202401",
"交检数量": "100",
"复检数量": "30",
"清单列表": [
{
"工序": "5",
"图样要求": "xxx要求AX",
"检测结果": "符合要求",
"复检结果": "符合要求",
"合格判定": "合格",
"合格判定1": "合格",
"备注": "鉴定合格"
},
{
"工序": "2",
"图样要求": "xxx要求DF",
"检测结果": "符合要求",
"复检结果": "符合要求",
"合格判定": "合格",
"合格判定1": "合格",
"备注": "鉴定合格"
},
{
"工序": "4",
"图样要求": "xxx要求DF",
"检测结果": "符合要求",
"复检结果": "符合要求",
"合格判定": "合格",
"合格判定1": "合格",
"备注": "鉴定合格"
},
{
"工序": "6",
"图样要求": "xxx要求DF",
"检测结果": "符合要求",
"复检结果": "符合要求",
"合格判定": "合格",
"合格判定1": "合格",
"备注": "鉴定合格"
}
]
}
2、演示效果
表格模板不变的效果
改变表格模板
这里插入新的列
肯定需要编辑其他报表数据,这里只是为了演示简单这样操作,采用批注的方式来解决报表的问题是一种思路,读者实际开发中根据业务需求来处理。
改变模板和数据源
真的做到一次编码,多次重用。
3、总结
通篇看下来读者可能会说,你这一篇下来一行代码都没,没有用。那你可能就理解错了,对于在工作中遇到问题的时候肯定是先找到解决思路再写代码验证的,本文只是提供一个思路,每个人遇到的业务问题不一样,我的代码也就没有了参考意义,就不贴代码了。
本文采用的是FlexCell ,这种思路放在 Excel 文档中照样适用
看完本文只需要记得处理报表的时候 批注是一种解决思路
var code = “67278971-2b0f-4755-9e50-f21ad16ffe90”