如何拆分每个单元格中有 2 个数据由回车符分隔的行?



有人给了我一个文件,有时数据不足。

数据应该是这样的:

+---------+-----------+--------+
| Name    | Initial   | Age    |
+---------+-----------+--------+
| Jack    | J         | 43     |
+---------+-----------+--------+
| Nicole  | N         | 12     |
+---------+-----------+--------+
| Mark    | M         | 22     |
+---------+-----------+--------+
| Karine  | K         | 25     |
+---------+-----------+--------+

有时它是这样的:

+---------+-----------+--------+
| Name    | Initial   | Age    |
+---------+-----------+--------+
| Jack    | J         | 43     |
+---------+-----------+--------+
| Nicole  | N         | 12     |
| Mark    | M         | 22     |
+---------+-----------+--------+
| Karine  | K         | 25     |
+---------+-----------+--------+

如您所见,Nicole 和 Mark 被放在同一行中,但数据由回车符分隔。

我可以按行拆分,但它会使数据相乘:

+---------+-----------+--------+
| Nicole  | N         | 12     |
|         | M         | 22     |
+---------+-----------+--------+
| Mark    | N         | 12     |
|         | M         | 22     |
+---------+-----------+--------+

这让我失去了马克与"第二行"数据相关联。

(此处数据纯为示例(

一种方法是通过对换行符/回车符进行Text.Split,将每个单元格转换为列表。

TextSplit = Table.TransformColumns(Source,
                {
                    {"Name",     each Text.Split(_,"#(lf)"), type text},
                    {"Initial",  each Text.Split(_,"#(lf)"), type text},
                    {"Age",      each Text.Split(_,"#(lf)"), type text}
                }
            )

现在,每一列都是列表列表,您可以使用List.Combine将其合并为一个长列表,您可以将这些列粘合在一起以制作带有Table.FromColumns的表格。

= Table.FromColumns( 
      {
          List.Combine(TextSplit[Name]),
          List.Combine(TextSplit[Initial]),
          List.Combine(TextSplit[Age])
      },
      {"Name", "Initial", "Age"}
  )

把这些放在一起,整个查询看起来像这样:

let
    Source = <Your data source>
    TextSplit = Table.TransformColumns(Source,{{"Name",  each Text.Split(_,"#(lf)"), type text},{"Initial",  each Text.Split(_,"#(lf)"), type text},{"Age",  each Text.Split(_,"#(lf)"), type text}}),
    FromColumns = Table.FromColumns({List.Combine(TextSplit[Name]),List.Combine(TextSplit[Initial]),List.Combine(TextSplit[Age])},{"Name","Initial","Age"})
in
    FromColumns

最新更新