一、文本函数的应用场景与核心逻辑
文本函数是数据清洗的核心工具,掌握 LEFT、RIGHT、MID、LEN 和 CONCAT,可以从杂乱的文本中精准提取信息,将分散的数据合并为规范格式,极大提升数据整理效率。无论是从身份证号中提取出生日期、从地址中分离省市、还是将姓和名合并为全名,文本函数都是必不可少的。
在实际工作中,我们从系统导出的数据往往格式混乱:姓名前后有多余空格、手机号和备注混在一个单元格、金额需要补齐位数。这些问题都可以通过文本函数批量处理。WPS 表格与 Excel 在文本函数上完全兼容,本文所有公式均可直接套用。
1.1 文本函数的分类
按功能可以分为四类:截取类(LEFT、RIGHT、MID)、统计类(LEN、LENB)、合并类(CONCAT、TEXTJOIN、&)、转换类(TEXT、TRIM、SUBSTITUTE、UPPER、LOWER)。掌握这些函数的组合使用,能解决 90% 以上的文本处理需求。
二、LEFT 与 RIGHT:从头尾截取字符
LEFT 从文本左侧开始截取指定数量的字符,RIGHT 从右侧截取,二者是对称的截取函数,适合处理固定长度的文本如手机号、编码、日期戳。
LEFT 语法:=LEFT(text, [num_chars])
RIGHT 语法:=RIGHT(text, [num_chars])
第一个参数是要截取的文本或单元格引用,第二个参数是截取的字符数。如果省略 num_chars,默认截取 1 个字符。
2.1 实际应用示例
| 原文本(A2) | 公式 | 结果 | 说明 |
| 13812345678 | =LEFT(A2,3) | 138 | 提取手机号前三位 |
| 13812345678 | =RIGHT(A2,4) | 5678 | 提取末四位 |
| ORD-2024-0315 | =RIGHT(A2,4) | 0315 | 提取订单日期部分 |
| 张三丰 | =LEFT(A2,1) | 张 | 提取姓氏 |
三、MID:从任意位置截取字符
MID 是最灵活的截取函数,可以从文本的任意指定位置开始提取任意数量的字符,是从身份证号、长编码中提取中间信息的首选工具。
语法:=MID(text, start_num, num_chars)
三个参数分别为:源文本、起始位置(从 1 开始计数)、截取长度。如果 start_num 大于文本总长度,返回空字符串。
3.1 从身份证号提取出生日期
18 位身份证号的第 7 到 14 位是出生日期(YYYYMMDD):
=MID(A2,7,8) 返回 "20000315" 格式的出生日期
进一步用 DATE 函数转为标准日期:
=DATE(MID(A2,7,4),MID(A2,11,2),MID(A2,13,2))
3.2 从身份证号提取性别
第 17 位奇数为男,偶数为女:
=IF(MOD(MID(A2,17,1),2)=1,"男","女")
四、LEN 与 LENB:统计字符长度
LEN 返回文本中的字符数,LENB 返回字节数,二者在判断中英文混合文本时有关键差异,常用于数据校验和格式判断。
语法:=LEN(text) / =LENB(text)
| 文本 | LEN | LENB |
| ABC | 3 | 3 |
| 张三 | 2 | 4 |
| 张San | 4 | 5 |
中文字符在 LEN 中计为 1,在 LENB 中计为 2。利用这个差异可以统计中文字符数:=(LENB(A2)-LEN(A2)) 返回中文个数。
数据校验示例——检查身份证号是否为 18 位:=IF(LEN(A2)=18,"正确","错误")
五、CONCAT 与 TEXTJOIN:合并文本
CONCAT 是 CONCATENATE 的升级版,可以一次性合并多个区域的文本;TEXTJOIN 更强大,支持自定义分隔符和忽略空单元格,是合并地址、拼接列表的最佳选择。
5.1 CONCAT 函数
语法:=CONCAT(text1, [text2], ...)
合并省市地址:=CONCAT(A2,B2,C2),将 A 列省、B 列市、C 列详细地址合并。也可使用 & 运算符:=A2&B2&C2,效果相同。
5.2 TEXTJOIN 函数
语法:=TEXTJOIN(delimiter, ignore_empty, text1, [text2], ...)
- delimiter:分隔符,如 "," 或 "、"
- ignore_empty:TRUE 忽略空单元格,FALSE 保留空
拼接多个姓名为逗号分隔:=TEXTJOIN(",",TRUE,A2:A10),自动跳过空白单元格,结果如"张三,李四,王五"。
合并带分隔符的地址:=TEXTJOIN("-",TRUE,A2:C2),结果如"广东省-深圳市-南山区"。
六、TEXT 函数:格式化文本
TEXT 函数可以将数值、日期按指定格式转换为文本,是生成报表标题、格式化编号、统一显示格式的核心函数。
语法:=TEXT(value, format_text)
| 原值 | 公式 | 结果 |
| 1234.56 | =TEXT(A2,"#,##0.00") | 1,234.56 |
| 2024/3/15 | =TEXT(A2,"yyyy年m月d日") | 2024年3月15日 |
| 5 | =TEXT(A2,"000") | 005 |
| 0.85 | =TEXT(A2,"0%") | 85% |
| 12345 | =TEXT(A2,"¥#,##0") | ¥12,345 |
生成带日期的报表标题:="销售日报-"&TEXT(TODAY(),"mm月dd日")
补齐编号位数也是 TEXT 的常见用途。当工号不足 6 位时自动补零:=TEXT(A2,"000000"),数字 123 会显示为 000123。这在生成订单编号、员工编号时非常实用,确保所有编号位数统一。配合 ROW 函数还可以自动生成序号:="NO-"&TEXT(ROW()-1,"000"),向下拖动即可生成 NO-001、NO-002、NO-003 等连续编号。
七、大小写转换:UPPER、LOWER、PROPER
UPPER 将英文字母全部转大写,LOWER 全部转小写,PROPER 首字母大写其余小写,这三个函数在处理英文姓名、产品编码、邮箱地址时是规范格式的利器。
语法简单,只需一个文本参数:
| 原文本(A2) | 公式 | 结果 | 适用场景 |
| hello world | =UPPER(A2) | HELLO WORLD | 产品编码全大写 |
| JOHN SMITH | =LOWER(A2) | john smith | 邮箱转小写 |
| john smith | =PROPER(A2) | John Smith | 英文姓名首字母大写 |
| BEIJING office | =PROPER(A2) | Beijing Office | 地址规范格式 |
实际应用中,邮箱地址统一小写是最常见的操作:=LOWER(TRIM(A2)),先去空格再转小写,一步到位。英文人名录入后规范首字母:=PROPER(TRIM(A2)),无论用户输入"JOHN"还是"john",都会自动转为"John"。
需要注意的是,这三个函数只对英文字母生效,中文字符不受影响。因此处理中英混合文本时可以放心使用,不会破坏中文内容。
八、数据清洗实战:TRIM、SUBSTITUTE 与 FIND
数据清洗是文本函数的高频场景,TRIM 去除多余空格、SUBSTITUTE 替换指定文本、FIND 定位字符位置,三者配合可以清理几乎所有的脏数据。
7.1 TRIM 去除空格
=TRIM(A2) 删除文本前后的所有空格,并将中间连续空格压缩为一个。注意:TRIM 只能去除普通空格(ASCII 32),不能去除不间断空格(CHAR(160)),后者需要配合 SUBSTITUTE 处理。
7.2 SUBSTITUTE 替换文本
语法:=SUBSTITUTE(text, old_text, new_text, [instance_num])
删除文本中所有横线:=SUBSTITUTE(A2,"-","")
删除不间断空格:=SUBSTITUTE(A2,CHAR(160),"")
替换第 N 次出现:只替换第二个逗号 =SUBSTITUTE(A2,",","、",2)
7.3 FIND 与 SEARCH 定位字符
语法:=FIND(find_text, within_text, [start_num])
FIND 区分大小写,SEARCH 不区分。提取 @ 符号前的邮箱用户名:
=LEFT(A2,FIND("@",A2)-1)
提取括号内的内容:
=MID(A2,FIND("(",A2)+1,FIND(")",A2)-FIND("(",A2)-1)
八、综合实战:清洗一组不规范数据
将理论组合应用,是检验文本函数掌握程度的最佳方式。以下是一个完整的客户数据清洗案例。
假设原始数据:A 列姓名带空格,B 列手机号格式混乱(带横线、空格),C 列邮箱大小写不一。
清洗步骤
步骤一:姓名去空格并提取姓氏
=TRIM(A2) 清理,再用 =LEFT(TRIM(A2),1) 取姓
步骤二:手机号标准化
=SUBSTITUTE(SUBSTITUTE(B2,"-","")," ","") 删除所有横线和空格
步骤三:邮箱统一小写
=LOWER(C2)
步骤四:合并为规范格式
=TRIM(A2)&"|"&SUBSTITUTE(SUBSTITUTE(B2,"-","")," ","")&"|"&LOWER(C2)
九、FAQ 常见问题解答
Q1:LEFT、RIGHT、MID 对中文的计数方式是怎样的?
在 WPS 表格和 Excel 中,LEFT、RIGHT、MID 按字符计数,不按字节。一个汉字算一个字符,=LEFT("张三丰",2) 返回"张三"。这与 LENB 的字节计数不同,处理纯中文文本时无需额外处理。
Q2:CONCATENATE 和 CONCAT 有什么区别?用哪个?
CONCATENATE 是旧函数,最多接受 255 个参数且不支持区域引用。CONCAT 是其升级版,可以直接引用整列或整区域,如 =CONCAT(A1:A10)。建议优先使用 CONCAT,兼容性更好,公式更简洁。
Q3:TEXT 函数转换后变成了文本,还能参与计算吗?
TEXT 的输出是文本格式,无法直接参与数学运算。如果既要格式化显示又要计算,可以保留原始数据列用于计算,单独加一列用 TEXT 格式化后用于展示或打印。或者反过来,用 VALUE 函数将文本转回数值。
Q4:如何批量删除一列数据中的某个特定字符?
使用 SUBSTITUTE 函数:=SUBSTITUTE(A2,"要删除的字符",""),然后向下填充,最后复制结果列,选择性粘贴为值覆盖原数据。也可以使用"查找和替换"功能(Ctrl+H)实现相同效果,对大数据量操作更快。
十、总结
文本函数是表格数据处理的基础功。截取靠 LEFT/RIGHT/MID,统计靠 LEN,合并靠 CONCAT/TEXTJOIN,格式化靠 TEXT,清洗靠 TRIM/SUBSTITUTE/FIND。这些函数本身并不复杂,真正的能力体现在组合使用上——嵌套两三个函数就能解决复杂的数据提取和清洗需求。建议在日常工作中遇到重复性的文本整理任务时,先思考能否用函数公式自动化,逐步积累常用的嵌套公式模板。WPS 表格与 Excel 在此领域的兼容性完全一致,可以放心跨平台使用。