标准Excel表格批量汇总过程及基础方法请参考文章:《PQ批量汇总Excel文件就是这么简单》,所有特殊情况处理都是在该基础方法之上加以适当的处理而已。
小勤:好烦啊,公司里有些让人填的表,有的在表头了加一行,有的又把我们设定的行给删除了,结果交上来的数据有的表头前2行,有的3行,而且里面各种杂乱说明备注……,像这种表怎么汇总啊?
大海:那你说,这有什么明确的规则能确定标题行开始的地方吗?
小勤:能不能通过搜索的方式来确定标题从哪一行开始?这还是基本有规律的,比如如果第一列里有“姓名”字样的,那肯定就是标题行了。
大海:好吧。如果这样的话,这个问题处理起来也不太复杂。PQ里有一个函数,可以让你对表进行搜索并确定位置:Table.PositionOf。
小勤:啊。这个是不是跟Text.PositionOf类似的?
大海:可以这么说吧。反正就是按条件找到对应的位置。比如我们找第一列里内容为姓名的位置:
= Table.PositionOf(
[Data],
[Column1="姓名"],
Occurrence.First,
"Column1"
)
小勤:这个函数参数看起来虽然有点儿多啊,分别都是什么意思?
大海:其实理解起来也不难:
小勤:还能多列匹配?
大海:对啊。比如你如果要求第1列里找到“姓名”,第2列找到“公众号”才算,那可以改为:
小勤:这样的话判断起来就相对灵活了。
大海:对的。再回到这个批量汇总数据的问题,还记得前面的文章《PQ-批量汇总多Excel表格:标题都从第n行起怎么办?》吗?
小勤:当然啊。现在也简单了,通过Table.PositionOf找到标题行所在的位置,再用Table.Skip函数跳过相应的行数,然后提升标题行,综合起来就是:
= Table.PromoteHeaders(
Table.Skip(
[Data],
Table.PositionOf(
[Data],
[Column1="姓名"],
Occurrence.First,
"Column1"
)
)
)
大海:对的。复杂问题其实都是由简单问题组成的,梳理清楚,一个一个的解决掉,然后再组合在一起就是了。