首页
学习
活动
专区
圈层
工具
发布

PQ-批量汇总多Excel表格之特殊处理:标题行前行数不确定的处理

标准Excel表格批量汇总过程及基础方法请参考文章:《PQ批量汇总Excel文件就是这么简单》,所有特殊情况处理都是在该基础方法之上加以适当的处理而已。

小勤:好烦啊,公司里有些让人填的表,有的在表头了加一行,有的又把我们设定的行给删除了,结果交上来的数据有的表头前2行,有的3行,而且里面各种杂乱说明备注……,像这种表怎么汇总啊?

大海:那你说,这有什么明确的规则能确定标题行开始的地方吗?

小勤:能不能通过搜索的方式来确定标题从哪一行开始?这还是基本有规律的,比如如果第一列里有“姓名”字样的,那肯定就是标题行了。

大海:好吧。如果这样的话,这个问题处理起来也不太复杂。PQ里有一个函数,可以让你对表进行搜索并确定位置:Table.PositionOf。

小勤:啊。这个是不是跟Text.PositionOf类似的?

大海:可以这么说吧。反正就是按条件找到对应的位置。比如我们找第一列里内容为姓名的位置:

代码语言:javascript
复制
= Table.PositionOf(
   [Data], 
   [Column1="姓名"],
   Occurrence.First,
   "Column1"
)

小勤:这个函数参数看起来虽然有点儿多啊,分别都是什么意思?

大海:其实理解起来也不难:

  • 第1个参数就是在哪个表里找
  • 第2个参数是找什么样的内容(一个行记录,可以有多项内容)
  • 第3个参数是找匹配的第一个?所有?还是最一个?
  • 第4个参数是匹配的条件(比如第2个参数里的记录有多个列时,是只匹配其中一个列?还是几个列?)

小勤:还能多列匹配?

大海:对啊。比如你如果要求第1列里找到“姓名”,第2列找到“公众号”才算,那可以改为:

小勤:这样的话判断起来就相对灵活了。

大海:对的。再回到这个批量汇总数据的问题,还记得前面的文章《PQ-批量汇总多Excel表格:标题都从第n行起怎么办?》吗?

小勤:当然啊。现在也简单了,通过Table.PositionOf找到标题行所在的位置,再用Table.Skip函数跳过相应的行数,然后提升标题行,综合起来就是:

代码语言:javascript
复制
= Table.PromoteHeaders(
    Table.Skip( 
      [Data], 
      Table.PositionOf(
          [Data],
          [Column1="姓名"], 
          Occurrence.First, 
          "Column1" 
      )
    )
)

大海:对的。复杂问题其实都是由简单问题组成的,梳理清楚,一个一个的解决掉,然后再组合在一起就是了。

下一篇
举报
领券