网站首页 > 技术文章 正文
Excel新函数Textjoin函数是字符拼接的利器,与之前的“&”与CONCATENATE函数相比,简直是太好用了,比之新函数CONCAT函数也是功能更加强大些。
关于Textjoin函数和Concat函数,在我Excel函数专栏中有详细介绍。
今天我们使用Power Query来实现文本拼接,我们来看例子:
我们要像做数据透视表一样,把文本透视过来,拼接在一起。
Excel中,我们有了新函数Textjoin,这个工作就变得非常简单了,我们只需要把条件列清楚就行,如果班级等于初一,就引用班级的内容,否者为空。
=TEXTJOIN(",",TRUE,IF($A$2:$A$19=D2,$B$2:$B$19,""))
这是一个单个单元格的数组公式,需要CTRL+SHIFT+ENTER三件结束。
那么在Power Query中我们有什么办法来进行这样的拼接呢?
有两个思路:
- 直接用Text.Combine函数拼接
- 透视列然后合并列
Text.Combine函数
Text.Combine函数是使用指定的分隔符,来拼接列表内的文本,需要两个参数:
- 第一参数:文本列表
- 第二参数:分隔符
首先要做分组操作,使用年级分组
然后修改上面标红的位置的内容:
这样就可以了,代码如下:
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 更改的类型 = Table.TransformColumnTypes(源,{{"年级", type text}, {"班级", type text}}), 分组的行 = Table.Group(更改的类型, {"年级"}, {{"计数", each Text.Combine([班级],",")}}) in 分组的行
透视
这个也要用到,我们讲过的Power Query组内编号,然后使用组内编号透视列,然后再合并列。
第一步:组内编号
先分组>添加组内编号>展开表
第二步:透视列
删除多余的全索引列,使用组内编号透视列
第三步:合并列
使用逗号做分隔符合并选中的列
代码:
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 更改的类型 = Table.TransformColumnTypes(源,{{"年级", type text}, {"班级", type text}}), 已添加索引 = Table.AddIndexColumn(更改的类型, "索引", 1, 1), 分组的行 = Table.Group(已添加索引, {"年级"}, {{"计数", each Table.AddIndexColumn(_,"A",1,1)}}), #"展开的“计数”" = Table.ExpandTableColumn(分组的行, "计数", {"年级", "班级", "索引", "A"}, {"年级.1", "班级", "索引", "A"}), 删除的列 = Table.RemoveColumns(#"展开的“计数”",{"索引"}), 已透视列 = Table.Pivot(Table.TransformColumnTypes(删除的列, {{"A", type text}}, "zh-CN"), List.Distinct(Table.TransformColumnTypes(删除的列, {{"A", type text}}, "zh-CN")[A]), "A", "班级"), 合并的列 = Table.CombineColumns(已透视列,{"1", "2", "3", "4", "5", "6"},Combiner.CombineTextByDelimiter(",", QuoteStyle.None),"已合并") in 合并的列
两种方法各有千秋,而且可以互相转换,第一种方法,我们也可以通过符号拆分列,变成透视列的效果,后一种方法,透视列后再合并。很多时候,我们会需要在这两种状态之间变来变去,就像和面一样,把数据揉来揉去,变成我们想要的样子。
总的说来,Textjoin函数与Text.Combine函数最为接近,
- Textjon函数要与if函数配合实现条件文本拼接
- Text.Combine函数需要与Table.Group函数配合,实现分组文本拼接
猜你喜欢
- 2024-10-02 掌控你的MySQL语句执行方案(如何让mysql执行脚本?)
- 2024-10-02 我爱Julia之入门-075(字符串05)
- 2024-10-02 Java入门超经典教程-数组的操作(java数组视频教学)
- 2024-10-02 AdaBoost算法(手稿+代码)(adaboost算法详解)
- 2024-10-02 有了for循环 为什么还要forEach?(为什么用for循环)
- 2024-10-02 UFS深入浅出 第二章 UFS结构 第三节 UFS分区
- 2024-10-02 Ruby 最常用指令和函数(备忘查询)
- 2024-10-02 MYSQL优化有理有据全分析(面试必备)
- 2024-10-02 最小优先队列 Index min priority queue
- 2024-10-02 mysql explain用法(mysql游标的定义与使用)
- 最近发表
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- js判断是否空对象 (63)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- phprequire_once (61)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)