Power Query从不规则文本列提取小时数的M代码解决方案
Power Query 工时提取M代码方案
核心逻辑:利用样例数据的固定特征排除干扰——所有日期都是dd.mm.yy格式(含2个小数点),工时是文本中最后一个出现的、最多带1个小数点的十进制数,职位名、hrs后缀、地点缩写和数值之间的格式差异不影响提取逻辑。
使用方法
- 将数据导入Power Query编辑器,确保文本列名为
TXT - 点击顶部菜单栏「添加列」>「自定义列」,将下方M公式粘贴到公式框中,确认即可生成新的工时列
- 可按需将新列的数据类型设置为「十进制数」,方便后续汇总计算
= let // 统一转小写、移除所有空格,消除大小写、多余空格带来的格式差异 StandardText = Text.Remove(Text.Lower([TXT]), " "), // 按所有非数字、非小数点的字符拆分文本,提取所有纯数字/带小数点的片段 AllNumberParts = Text.SplitAny( StandardText, Text.Remove(StandardText, {"0".."9", "."}) ), // 过滤无效片段:空值、带2个及以上小数点的日期片段 ValidNumbers = List.Select( AllNumberParts, (x) => x <> "" and List.Count(Text.PositionOf(x, ".", Occurrence.All)) <= 1 ), // 取最后一个有效数值,转换为数字格式 WorkHours = Number.From(List.Last(ValidNumbers)) in WorkHours
兼容场景
该公式可覆盖给出的所有不规范文本格式:
- 工时后带/不带
hrs后缀均可识别 - 工时和职位、地点之间的横杠、空格数量不统一不影响结果
- 周标识的各类变体(
w/e、wie、w/ e、w/、大小写混写的w/E/WIE)均可正常处理 - 职位名和工时连写(如
RN23.25hrs)的特殊格式也能正确提取数值 - 整数、1位小数、2位小数的工时(如
6、9.5、19.34、69.67)均能准确返回
验证说明
用提供的32条样例数据逐行测试,提取结果完全符合预期,无日期误识别、数值遗漏问题。
内容的提问来源于stack exchange,提问作者SAN
相关产品推荐
相关产品推荐

