返回Excel催化剂目录

产品文档 / Excel催化剂

第33波-报表形式数据结构转标准数据源

一般来说,如果有标准的数据源结构,对后续的分析工作将会带来极大的方便。但现实中,许多的原始数据并不预期那样,一个主题的数据已经干净地存放在一个工作表中。今天Excel催化剂再次送上批量化操作,将不规则的难以立即分析使用的报表形式数据源转换为标准的数据库结构数据源。 功能修复与更新 20181017

一般来说,如果有标准的数据源结构,对后续的分析工作将会带来极大的方便。但现实中,许多的原始数据并不预期那样,一个主题的数据已经干净地存放在一个工作表中。今天Excel催化剂再次送上批量化操作,将不规则的难以立即分析使用的报表形式数据源转换为标准的数据库结构数据源。

功能修复与更新

  • 20181017 追加可满足主从表结构的报表样式转为标准数据源结构的功能,如单行订单表头+多行明细数据结构的数据源转为一个大表的明细数据。具体可查看视频教程有相应效果演示

业务场景

大量的数据分散在零散的Excel表格中,需要对其进行合并汇总,才能做分析工作。

其中一大类数据为以报表的形式存储的数据结构,例如一份简历、一份财务报表和一张订单等,还有许多需要发送其他人填写的问卷类、收集类表单数据。

对这些报表类型的数据合并,还不同于简单的工作薄合并那样,每个工作表里存放的都是标准的流水式记录单数据。无法简单地将复制粘贴的工作用代码自动化实现。

内容插图

内容插图

当面对有父子表结构时,如上图的下方有明细数据,明细数据的数量不固定,初版功能以横向展开的形式存放,后期再追加纵向多行数据存放的数据结构。

内容插图

功能操作指引

前面描述到的业务场景,用代码实现,其实大部分会一点VBA的人,应该都可以写出来,达到能用的水准。

能用到优秀卓越还是有一段距离,不妨耐心看看Excel催化剂的实现方式和你预想的方式有何不同之处,和如此处理后带来的效果是否有借鉴之处

第1步,配置映射关系

首先程序要知道,你的原始数据的结构是怎样的,要提取哪些信息,原始的信息和需要生成的目标表的信息之间的匹配关系如何,这些工作都是最基本的业务逻辑,没法用程序去用逻辑判断产生的。

内容插图

点击【配置映射关系】,程序在当前活动工作薄下,新建一个【字段映射表】。

若仅是追加或修改的方式重新对数据源进行转换,此处程序进行判断,若已有【字段映射表】,将不再新建清空原匹配过的信息。

内容插图

对【字段映射表】填写好之后的效果如下:

内容插图

当引用其他工作薄的单元格,容易出现带上其他工作薄的文件名或文件路径,下次打开结果表时,会提示链接工作薄是否更新之类的弹窗

同时引用过程中默认变为绝对引用,有$符号,不能进行下拉填充的方式批量处理其他列。

可以把原始数据表复制一份到当作结果表工作薄,在同一工作薄上引用其他工作表单元格,可避免以上说的缺点

内容插图

内容插图

最后开放只填写原始数据的所在单元格的地址,若选择不方便时,直接输入即可,后期会开发几个自定义函数配合使用,更为方便。

仅仅一个字段列映射,Excel催化剂想了许久,推翻了几种方案,最终以现在的方式呈现,优秀的由来从不是简单的。

推翻过的方案:

用窗体的方式,用户自己填写结果表名称和对应的单元格区域,弊端如下:

  1. 不能批量从原始数据中复制多个单元格作结果表列名称
  2. 不能向下填充的方式一次性填充相邻的源表单元格引用
  3. 窗体和工作表来回切换麻烦
  4. 最要命的是窗体仅使用一次,下次想复用,又要重新填写,不能保存已匹配过信息

选定源表的文件路径区域,转换为目标标准数据表结构

一、先使用GetFiles自定义函数拿到所需转换数据的源文件的路径

使用路径清单而非文件夹,好处如下:

  1. 可自行二次检查文件夹内的文件是否都应用于数据源来调用生成
  2. 有其他特殊文件剔除或筛选时,可充分发挥Excel的查找替换、自动筛选、排序等操作,这里用窗体机械地简单逻辑判断所没法达到的体验

内容插图

二、选择要转换的文件路径区域,点击【选定区域转换】

内容插图

转换后的结果表,原数据中一个工作表转换为一条记录(后期再优化父子表结构的转换可转换多条记录,更符合数据分析场景使用),另加上文件名和工作表名两列以示区分数据来源。

内容插图

隐藏的细节处理部分

前面说到,报表格式转标准数据源格式,知道了思路,基本可以自己简单写几句VBA代码得到想要的结果。前提条件是数据量不大的情况下可接受

读取Excel文件,若使用COM的方式来读取,大批量文件处理来说,肯定会有性能瓶颈,所以Excel催化剂一开始就不打算用原生的Excel的VBA对象模型来操作,改换为使用不依赖于Excel的NPOI和EPPLUS两个类库的读取,最终测试结果,NPOI的读取速度领胜!

测试数据情况:

数量量:读取一万个文件,每个文件两个工作表

读取单元格数量:30个单元格的读取

使用时间(含导出到Excel智能表):

xls格式文件,NPOI读取为30多秒;xlsx文件,NPOI为3分钟左右,EPPLUS为10多分钟。

总结

当大量的数据未能以标准的数据表结构存放时,必要给后续的分析工作带了许多麻烦。

而现实中又不能保证所有数据生成都有专门的系统来操作。Excel表格分发容易,使用广泛,很适合做数据收集的工作,数据采集模板,一般以类似报表的形式来做排版,方便填写。

一个非规范化的报表类型数据源,转换为结构化的标准数据表,Excel催化剂为大家想出的方案为:操作体验友好、可复用、高性能的处理方式。一个简单的功能,做到极致,希望大家喜欢。