You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Google Sheets数组公式,实现用餐记录格式标准化与重复数据删除

Google Sheets 字符串格式化数组公式

使用说明

将以下公式粘贴至结果列首行(如B1),原始数据存储在A列即可自动处理所有行内容,新增数据无需手动下拉公式。

最终公式

=ARRAYFORMULA(LET(
  // 读取A列所有非空原始数据
  raw, FILTER(A:A, A:A<>""),
  // 提取方括号内的日期部分
  date_part, REGEXEXTRACT(raw, ",\s*(.*?)\]"),
  // 标准化为d/m/yyyy格式,自动去除日月前置零
  std_date, TEXT(DATEVALUE(date_part), "d/m/yyyy"),
  // 提取方括号后、冒号前的姓名,去除多余空格
  name, TRIM(REGEXEXTRACT(raw, "\]\s*(.*?):")),
  // 提取冒号后的原始状态,合并多余空格
  status_raw, TRIM(REGEXREPLACE(REGEXEXTRACT(raw, ":\s*(.*)"), "\s+", " ")),
  // 第一步修正状态:补全min的s,修正常见午餐拼写错误
  status_clean, REGEXREPLACE(REGEXREPLACE(LOWER(status_raw), "(\d+)\s*min\b", "$1 mins"), "\b(lunc|luch|lunches)\b", "lunch"),
  // 第二步修正状态:修正常见晚餐拼写错误,补全时间与餐类间的空格
  status_clean, REGEXREPLACE(REGEXREPLACE(status_clean, "\b(din|diner|dnner)\b", "dinner"), "(\d+mins)\s*(\w+)", "$1 $2"),
  // 第三步修正状态:统一No开头格式
  status_clean, REGEXREPLACE(status_clean, "\bno\s*(\w+)", "No $1"),
  // 映射到指定的固定状态格式
  status_std, SWITCH(TRUE,
    REGEXMATCH(status_clean, "no.*lunch"), "No lunch",
    REGEXMATCH(status_clean, "no.*dinner"), "No dinner",
    REGEXMATCH(status_clean, "15.*lunch"), "15mins lunch",
    REGEXMATCH(status_clean, "30.*lunch"), "30mins lunch",
    REGEXMATCH(status_clean, "45.*lunch"), "45mins lunch",
    REGEXMATCH(status_clean, "15.*dinner"), "15mins dinner",
    status_clean
  ),
  // 拼接最终结果,去重
  UNIQUE(std_date & " " & name & " " & status_std)
))

功能匹配说明

  • 动态数组效果:通过ARRAYFORMULA+FILTER整列读取数据,新录入的原始数据会自动生成处理结果
  • 冗余字符移除:正则提取时直接过滤时间、[]、:、,等不需要的符号
  • 日期格式标准化:通过DATEVALUE转日期格式后用TEXT指定输出格式,自动去除日月的前置零
  • 用餐状态纠错:先统一转小写消除大小写差异,再用正则修正拼写错误、补全缺漏的s和空格,最后映射到指定的6种固定格式
  • 重复条目去重:最终输出前调用UNIQUE过滤掉日期、姓名、状态完全一致的重复行

内容的提问来源于stack exchange,提问作者Edmund Ong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:24:05