excel split函数_Excel 字符串拆分

用 Excel 处理数据时,有时需要对字符串进行拆分。对于比较简单的拆分,使用 Excel 函数可以顺利完成,但碰到一些特殊需求,或者拆分的规则比较复杂时,则很难用 Excel 实现了。这里列出一些拆分需求示例,分析拆分难点,并提供 SPL 解决代码。SPL 是专业计算引擎 esProc 使用的语言,用于处理结构化数据运算非常方便,对于字符串拆分的运算也很简单。

一、规则单词拆分

这里有一份车间采购产品清单,清单的每一项包含了需要采购的品牌以及产品型号。现在想要把每一项的品牌以及型号拆分后单独列到后面。

文件 productlist.xlsx 中数据如下:

v2-84932c8cbd28b5d55f92c5d3f94b7b0a_b.jpg

期望结果:

v2-47255af1f54302154b50162569c1ccf8_b.jpg

使用 Excel 来处理这类拆分时,可以使用数据的分列,但是分列有个缺点,其实也算不上缺点,只是针对这个只想拆出品牌的需求来说单词被过渡拆分了。比如后面的型号,也会被拆分到多个列,又需要重新合并,过程有点得不偿失。不过 Excel 还有一个快速填充,可以根据给定的参考值,比如第一行给定 PANASONIC,便可使用类似规则快速填充后面行的拆分,然后再用 Mid 函数间接算出型号的字符串部分,过程依然繁琐。

使用 SPL 可以直接读取 Excel 文件,对于实时分析操作,也可以将 Excel 中的数据复制到剪贴板,然后在 SPL 里面使用 clipboard 函数直接从剪贴板获取数据,数据整理完后,再将结果放入剪贴板,然后在 Excel 中粘贴结果,这样便可将 Excel 的分析操作跟 SPL 的计算无缝对接起来,方便而又高效。

SPL 拆分代码:

AB
1=clipboard().import@i()/从剪贴板导入产品清单
2=A1.(~.split@1(" "))/从第一个空格处将产品清单分离为两部分,产生一个序列的序列
3=A2.concat@n("t")/拼接为子序列的成员用 Tab 分隔,序列的成员之间用回车分隔的二维表串
4=clipboard(A3)/将串值放置到剪贴板

代码执行完成后,只需在B1 格粘贴便可得到期望结果。

二、数字分离

如下为一些数字跟字符混合在一起的数据,现在需要将数字和字符分离开。

文件 numbers.xlsx 中数据如下:

v2-df7d452aaf3a97d7d57d21ef54b5793f_b.png

期望结果:

v2-031f9e5b546cfc2efbaaea84cc5b3842_b.jpg

如果是光分离数字出来,仍然可以使用给定首行参考值,然后采用快速填充,便可以将所有数字分离出来。但是要将剩余的字符再分离出来,Excel 没有合适的办法,因为有些数字是跟字符交叉混合在一起,没法用 Mid 等函数拆分。只能采用 VBA 写代码逐字循环,判断字符类型,挨个分离,过程依然麻烦。

SPL 可以直接将串分离成单字符,并根据类型划分:

AB
1=clipboard().split@n()/将剪贴板数据按回车拆分为成员,然后将成员再逐字拆分
2=A1.(~.align@a([true,false],isdigit(~)).(~.concat()))/每一项字符序列用是否为数字分成两组,继而再拼成串,从而分离出数字和字符
3=A2.concat@n("t")/将两层序列分别用 Tab 和回车拼为二维表式的大串
4=clipboard(A3)/将大串放置到剪贴板

三、日期分离

下面为一些包含日期的句子或段落,现在想要把句子里面所有的日期分离出来,一行中包含多个日期时,用分号分开。

文件 multidates.xlsx 中数据如下:

v2-871911d029bf9295736071fc53a928d2_b.jpg

期望结果:

v2-f077ce3d10907fabc03a1a3e5cb66009_b.jpg

要将句子里面的日期分离出来,Excel 没有相应的办法,尤其像这种一个句子里面有不定个数的日期。如果是固定位置或长度的日期格式,才可能用截取固定长度,或者使用快速填充能够办到。对于上述多个日期的分离,只能写 VBA 代码,再用正则表达式去匹配解析,完成这种需求对人员要求较高,且实现过程繁琐。

SPL 直接用空格分割串为单词序列,然后按格式转换日期类型的数据:

AB
1=clipboard().split@n(“ “)/将剪贴板数据按回车拆分成员,然后用空格将每一成员拆分为单词序列
2=A1.(~. (date(~,"dd.MM.yy")))/将单词序列的成员按照指定格式转换为日期类型的数据
3=A2.(~.select(ifdate(~)))/选出序列中的日期类型的值
4=clipboard(A3.concat@n(“;”))/将日期串序列结果拼接为二维表串并放置到剪贴板

执行完上述代码后,直接在源表中的B1 格执行粘贴,即可得到期望结果。

四、按字符拆分

如下表为一列长度不等的数字,现在需要将数字逐字拆分成为单独的列。

文件 number.xlsx 的数据:

v2-e94f9726623b5599a7dd9e3c611af4fb_b.jpg

期望结果:

v2-37cd7c4c70fecf797b29e9db762ff0a1_b.jpg

使用 Excel 拆分上述数字时,首先想到的是使用分列,但是像这种逐字拆分,分列时只能一个一个指定分隔位,数字比较长时就要多次重复设置,操作多而麻烦。其次是使用函数,比如可以在 B1 写入 =MID($A1,COLUMN(A1),1),然后拖拽鼠标进行行填充以及列填充,但这种操作不好掌握最大列数,篇幅大时,操作也不方便。

SPL 可以直接按字符拆分:

AB
1=clipboard().split@n()/将剪贴板数据按回车拆分成员,然后每个成员再缺省拆分为单字符序列
2=A1.concat@n("t")/将拆分后的两层序列拼成串式二维表
3=clipboard(A2)/将结果放置到剪贴板

上述代码执行完成后,同样在 B1 处粘贴拆分后的数据即可。

五、属性表和文件名拆分

如下数据为一段日志描述文件,结构相对复杂,其中包含类似于属性表的分节描述。现在想将属性描述中的 PublicKeyToken 以及文件名分离出来。

文件 log.xlsx 的数据:

v2-d3f87632a711c4f85ffffc48edc5ba69_b.jpg

期望结果:

v2-65633c2dce8e742d659113a73b20f36e_b.jpg

这是一个综合串的分离,第一层为用逗号分隔的描述串,然后第二项类似于属性分节串的描述。所以使用 Excel 时,需要多次分列,以及多次快速填充,方可完成期望结果。同样是步骤多,且需要给定参考值来快速填充,过程繁琐。

SPL 提供了函数直接对属性串取值,以及对文件名的不同部分拆分:

AB
1=clipboard().split@nc()/将剪贴板数据用回车拆分成员,然后以逗号拆分子成员序列
2=A1.([replace(~(2),""","").property("PublicKeyToken"),filename(replace(~(3),""",""))])/去掉两端引号后,用属性 property 函数从第 2 项获取 PublicKeyToken 的值;再用 filename 函数拆分出第 3 项中的文件名;再将这两个值构成序列
3=clipboard(A2.concat@n("t"))/将结果拼为大串放置到剪贴板
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Power Query M 函数可以用来拆分字符串。您可以使用 Text.Split 函数字符串拆分为单独的字符,并使用 Table.FromList 函数将其转换为格形式。 示例: ``` let Source = "Split me!", Splitted = Text.Split(Source, ""), #"Converted to Table" = Table.FromList(Splitted, Splitter.SplitByNothing(), null, null, ExtraValues.Error) in #"Converted to Table" ``` 在这个例子,我们首先定义了一个名为 "Source" 的变量,它存储要拆分字符串。然后,我们使用 Text.Split 函数字符串拆分为单独的字符,并使用 Table.FromList 函数将其转换为格形式。最后,我们返回转换后的格。 ### 回答2: Power Query的M语言提供了丰富的函数来处理数据,包括拆分字符串的功能。通过Power Query的编辑器,可以使用M语言的函数来实现拆分字符串的需求。 常用的M函数有Text.Split和Text.SplitAny,可以根据指定的分隔符将字符串拆分多个字符串。使用Text.Split函数时,需要指定分隔符,并且可以选择是否忽略空白字符。例如,使用Text.Split("Hello,World", ",")可以将字符串"Hello,World"拆分成"Hello"和"World"两个子字符串。 另外,Text.SplitAny函数可以根据多个字符进行拆分。使用Text.SplitAny("Hello,World", {",", " "})可以将字符串"Hello,World"按照逗号和空格进行拆分,得到"Hello"、"World"两个子字符串。 如果要拆分字符串并保留分隔符,可以使用Text.Splitter函数。使用Text.Splitter("Hello,World", {",", " "}, true)会返回一个拆分器,可以使用这个拆分器来逐个获取拆分后的子字符串和分隔符。 除了拆分字符串,M语言还提供了其他常用的字符串处理函数,如Text.Combine用于将多个字符串合并成一个字符串、Text.Trim用于去除字符串前后的空白字符、Text.Length用于获取字符串的长度等。 总之,Power Query的M语言提供了强大的字符串处理函数,可以根据需求使用不同的函数来实现字符串拆分、合并、替换等操作。 ### 回答3: Power Query是一种用于数据转换和整理的数据查询语言。M函数是Power Query的一种函数,用于执行各种数据操作和转换。 要拆分字符串,我们可以使用Power QuerySplit函数Split函数将一个字符串拆分多个部分,然后将这些部分保存在一个列。 要使用Split函数,我们需要提供要拆分字符串和用于拆分的分隔符。分隔符可以是任何字符字符串,例如逗号、空格或连字符。 下面是使用Power Query M函数拆分字符串的示例: 让我们假设有一个包含姓名和姓氏的字符串。我们想要将这些姓名和姓氏拆分成两个不同的列。 1. 首先,我们需要将字符串转换为Power Query格数据类型。我们可以使用List转Table函数来实现这一点。 2. 创建一个新列,用于存储拆分后的姓氏。我们可以使用Split函数,将字符串拆分成两部分,然后选择第二部分作为姓氏。 3. 创建另一个新列,用于存储拆分后的名字。我们可以使用Split函数,将字符串拆分成两部分,然后选择第一部分作为名字。 4. 最后,我们可以选择删除原始字符串列,只保留拆分后的姓氏和名字列。 通过编写Power Query M函数,我们可以自动化拆分字符串的过程,使数据整理更加高效和准确。 总结一下,Power Query M函数可以通过使用Split函数拆分字符串。只需按照上述步骤将字符串转换为格数据类型,然后使用Split函数进行拆分。这样可以更方便地进行数据整理和转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值