实例:Excel Power Qeury 拆分字符串再合并
今天接着给大家讲解一个关于Excel Power Query的例子。
这个问题也是一个朋友问题,解决的方法有很多种,这里给大家展示两个很常见的例子。
如下图所示:
将第1行与第2行的数据先按逗号“,”进行拆分,再按竖线“|”进行拆分后,取每个逗号的分隔的第一个数字用逗号连接;然后再取每个逗号前的两个竖线中间的数字进行连接。
将第1行与第2行的原始数据上载至Excel Power Query编辑器中。
接着看下面的两种方法。
方法1
首先上代码给的的看一下:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
trans_1 = Table.TransformColumns(源,
{
"输入"
,each
Record.ToList(
[
a=Text.Split(_,","),
b=
[
t1=Text.Combine(
List.Transform(a
,each
Text.BeforeDelimiter(_,"|")
)
,","),
t2=Text.Combine(
List.Transform(a
,each
Text.BetweenDelimiters(_,"|","|")
)
,",")
]
]
[b])
}
)
[输入],
transf_2 = Table.FromColumns(trans_1,{"content"})
in
transf_2
这个思路相对来说比较简单:首先使用Text.Split拆分字符串,分隔符为逗号,拆分list.然后再使用List.Transform遍历每一个list,继续使用Text.Split进行拆分。然后使用Text.Combine合并。最后使用Record.ToList转化成list后再转化成table即可。
这里注意使用的思路是:先按逗号拆分,再按竖线拆分,最后取出自己想要的即可。
方法2
首先上代码给的的看一下:
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
trans = Table.TransformColumns(源,
{
"输入",
each
List.Transform(
Text.Split(_,","),
(x)=>List.RemoveLastN(
Text.Split(x,"|")
,1)
)
}
)
{0}
[输入],
trans_1 = Table.FromRows(trans,{"a","b"}),
trans_2 = Table.FromColumns(
{
{
Text.Combine(trans_1[a],","),
Text.Combine(trans_1[b],",")
}
}
,{"content"}
)
in
trans_2
这个思路与上面的方法2的思路基本上也是一样的,这次拆分的时候代码的重复度较低。但是大体的思路是一样的。
方法3
首先上代码大家看一下。
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
trans_1 = Table.TransformColumns(源,
{
"输入"
,each
Text.SplitAny(_,",|")
}
)
{0}
[输入],
trans_2 = Table.FromRows(
{
{
Text.Combine(
List.Alternate(trans_1,2,1,1)
,",")
},
{
Text.Combine(
List.Alternate(
List.Skip(trans_1,1),2,1,1)
,",")
}
}
,{"content"}
)
in
trans_2
这个思路较前面的两个思路的话更加地简洁方便。使用了Text.Split函数的增强版Text.SplitAny函数,拆分起来更加地方便。另外还使用了另外一个函数即List.Alternate函数,类似于Excel工作表函数中的Offset函数。
Excel和PowerBI聚焦:小必
自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)