一般来说,如果有标准的数据源结构,对后续的分析工作将会带来极大的方便。但现实中,许多的原始数据并不预期那样,一个主题的数据已经干净地存放在一个工作表中。今天Excel催化剂再次送上批量化操作,将不规则的难以立即分析使用的报表形式数据源转换为标准的数据库结构数据源。
文章出处说明
业务场景
大量的数据分散在零散的Excel表格中,需要对其进行合并汇总,才能做分析工作。
其中一大类数据为以报表的形式存储的数据结构,例如一份简历、一份财务报表和一张订单等,还有许多需要发送其他人填写的问卷类、收集类表单数据。
对这些报表类型的数据合并,还不同于简单的工作薄合并那样,每个工作表里存放的都是标准的流水式记录单数据。无法简单地将复制粘贴的工作用代码自动化实现。
类似报表形式的原始数据结构
期待转换后的格式为标准数据表结构
当面对有父子表结构时,如上图的下方有明细数据,明细数据的数量不固定,初版功能以横向展开的形式存放,后期再追加纵向多行数据存放的数据结构。
当遇上一列有多条记录时,结果表以横向展开的方式存放
功能操作指引
前面描述到的业务场景,用代码实现,其实大部分会一点VBA的人,应该都可以写出来,达到能用的水准。
能用到优秀卓越还是有一段距离,不妨耐心看看Excel催化剂的实现方式和你预想的方式有何不同之处,和如此处理后带来的效果是否有借鉴之处
第1步,配置映射关系
首先程序要知道,你的原始数据的结构是怎样的,要提取哪些信息,原始的信息和需要生成的目标表的信息之间的匹配关系如何,这些工作都是最基本的业务逻辑,没法用程序去用逻辑判断产生的。
功能入口位置
点击【配置映射关系】,程序在当前活动工作薄下,新建一个【字段映射表】。
若仅是追加或修改的方式重新对数据源进行转换,此处程序进行判断,若已有【字段映射表】,将不再新建清空原匹配过的信息。
生成一个字段映射表
对【字段映射表】填写好之后的效果如下:
字段映射两种方式
当引用其他工作薄的单元格,容易出现带上其他工作薄的文件名或文件路径,下次打开结果表时,会提示链接工作薄是否更新之类的弹窗
同时引用过程中默认变为绝对引用,有$符号,不能进行下拉填充的方式批量处理其他列。
可以把原始数据表复制一份到当作结果表工作薄,在同一工作薄上引用其他工作表单元格,可避免以上说的缺点
当引用其他工作薄的单元格
引用当前工作薄其他工作表单元格
最后开放只填写原始数据的所在单元格的地址,若选择不方便时,直接输入即可,后期会开发几个自定义函数配合使用,更为方便。
仅仅一个字段列映射,Excel催化剂想了许久,推翻了几种方案,最终以现在的方式呈现,优秀的由来从不是简单的。
推翻过的方案:
用窗体的方式,用户自己填写结果表名称和对应的单元格区域,弊端如下:
不能批量从原始数据中复制多个单元格作结果表列名称
不能向下填充的方式一次性填充相邻的源表单元格引用
窗体和工作表来回切换麻烦
最要命的是窗体仅使用一次,下次想复用,又要重新填写,不能保存已匹配过信息
选定源表的文件路径区域,转换为目标标准数据表结构一、先使用GetFiles自定义函数拿到所需转换数据的源文件的路径
使用路径清单而非文件夹,好处如下:
可自行二次检查文件夹内的文件是否都应用于数据源来调用生成
有其他特殊文件剔除或筛选时,可充分发挥Excel的查找替换、自动筛选、排序等操作,这里用窗体机械地简单逻辑判断所没法达到的体验
使用GetFiles自定义函数得到路径清单
二、选择要转换的文件路径区域,点击【选定区域转换】
按提示选择新建新表还是覆盖现有表
转换后的结果表,原数据中一个工作表转换为一条记录(后期再优化父子表结构的转换可转换多条记录,更符合数据分析场景使用),另加上文件名和工作表名两列以示区分数据来源。
转换后的结果表隐藏的细节处理部分
前面说到,报表格式转标准数据源格式,知道了思路,基本可以自己简单写几句VBA代码得到想要的结果。前提条件是数据量不大的情况下可接受
读取Excel文件,若使用COM的方式来读取,大批量文件处理来说,肯定会有性能瓶颈,所以Excel催化剂一开始就不打算用原生的Excel的VBA对象模型来操作,改换为使用不依赖于Excel的NPOI和EPPLUS两个类库的读取,最终测试结果,NPOI的读取速度领胜!
测试数据情况:
数量量:读取一万个文件,每个文件两个工作表
读取单元格数量:30个单元格的读取
使用时间(含导出到Excel智能表):
xls格式文件,NPOI读取为30多秒;xlsx文件,NPOI为3分钟左右,EPPLUS为10多分钟。
总结
当大量的数据未能以标准的数据表结构存放时,必要给后续的分析工作带了许多麻烦。
而现实中又不能保证所有数据生成都有专门的系统来操作。Excel表格分发容易,使用广泛,很适合做数据收集的工作,数据采集模板,一般以类似报表的形式来做排版,方便填写。
一个非规范化的报表类型数据源,转换为结构化的标准数据表,Excel催化剂为大家想出的方案为:操作体验友好、可复用、高性能的处理方式。一个简单的功能,做到极致,希望大家喜欢。
系列文章
一文带你全面认识Excel催化剂系列功能
安装过程详解及安装失败解决方法
第1波-工作表导航
第2波-数字格式设置
第3波-与PowerbiDesktop互通互联
第4波-一大波自定义函数高级应用,重新定义Excel函数的学习和使用方法
第5波-使用DAX查询从PowerbiDeskTop中获取数据源
第6波-导出PowerbiDesktop模型数据字典
第7波-智能选区功能
第8波-快速可视化数据
第9波-数据透视表自动设置
第10波-快速排列工作表图形对象
第11波-快速批量插入图片
第12波-快速生成、读取、导出条形码二维码
第13波-一键生成自由报表
第14波-一键生成零售购物篮分析
第15波-接入AI人工智能NLP自然语言处理
第16波-N多使用场景的多维表转一维表
第17波-批量文件改名、下载、文件夹创建等
第18波-在Excel上也能玩上词云图
第19波-Excel与Sqlserver零门槛交互-查询篇
第20波-Excel与Sqlserver零门槛交互-数据上传篇
第21波-Excel与Sqlserver零门槛交互-执行SQL
第22波-Excel文件类型、密码批量修改,补齐Power短板
第23波-非同一般地批量拆分工作表
第24波-批量发送邮件并指点不同附件不同变量
第25波-小白适用的文本处理功能
第26波-正确的Excel密码管理之道
第27波-Excel工作表设置快捷操作
第28波-工作薄瘦身,安全地减少非必要冗余
第29波-追加中国特色的中文相关自定义函数
第30波-工作表快捷操作(批量创建、命名、排序、工作表目录)
第31波-数量金额分组凑数功能,财务表哥表姐最爱
第32波-空行空列批量插入和删除
关于Excel催化剂
Excel催化剂插件使用最新的布署技术,实现一次安装,日后所有更新自动更新完成,无需重复关注更新动态,手动下载安装包重新安装,只需一次安装即可随时保持最新版本!
领取专属 10元无门槛券
私享最新 技术干货