工作中经常会遇到收集各个分公司的表然后汇总到一张表的情况,PowerBI或powerquery中的”从文件夹获取数据“提供了很大的便利。
不过,前提是所有文件的sheet名是相同的。如果sheet名不同,你可能需要学习一些骚操作。
以下是示例文件:
选择从文件夹中获取数据:
合并并加载,以第一个文件为示例文件:
不过,由于我的每个文件中的sheet名是不同的,所以出来一行错误:”该键与表中的任何行均不匹配“:
TIPS:
关于为什么会出现这个错误,我曾写过一篇文章专门介绍过:
整理你的报告从使用SQL开始
因为其它excel表中并没有示例文件中的“year2000”这个sheet名,所以会出现错误。
那如何解决呢?
解决办法1:
在上面这篇文章中也讲过,我们可以直接用0来表示第一行,第一行代表着第一个sheet,顺序是不会变的:
因此,我们打开转换示例文件,导航:
将这里的[Item="year2000",Kind="Sheet"]
改成0
:
这样我们就将所有的excel文件中的第一个sheet导入进来了:
需要注意的是:
前文说的也很清楚,0代表第一个sheet,也就是说必须保证想要汇总的数据都在第一个sheet里(sheet名可以随意)。
但是如果待汇总的excel文件中,各个sheet的顺序是乱的(实际工作场景中经常发生),那么这种方式就不行了。
不过,如果sheet名有一定的规律,那么还是有办法解决的。
解决办法2:
通过筛选sheet名的方式。比如我们的示例文件中,我们想要获取的sheet名规则是”year20xx“,那么我们就可以以开头为”year“去筛选这些表,然后再将序号是0的表展开。
在转换示例文件中,进行修改:
也能得到正确的结果。
结论
PowerQuery给了我们很多便捷的方法汇总文件,这些方法要比手动或者使用VBA节省更多的时间。
然而默认的设置总是生硬的,限制条件很大,实际业务场景往往比预置环境复杂。
好在PowerQuery每一步都提供了详细的M代码支撑,通过适当修改代码,就可以实现不同的汇总方式。