Google Sheets/Data Studio中训练数据拆分与总容量计算的RegEx实现需求
在Google Sheet中计算训练总容量的解决方案
我来帮你搞定这个训练容量计算的需求,不用切换到Python,直接在Google Sheet里就能高效实现,给你两种实用方案:
方案一:用内置函数组合(无需代码)
如果你不想写脚本,直接用Google Sheet的内置函数就能完成计算。假设你的训练数据在A1单元格,直接在其他单元格输入下面的公式即可:
=SUM(ARRAYFORMULA(IFERROR(REGEXEXTRACT(SPLIT(A1, ", "), "(\d+)kg")*REGEXEXTRACT(SPLIT(A1, ", "), "-(\d+)x")*REGEXEXTRACT(SPLIT(A1, ", "), "x(\d+)"))))
公式拆解:
SPLIT(A1, ", "):把单元格里的多组数据按,拆分,变成独立的训练组条目REGEXEXTRACT(..., "(\d+)kg"):提取每组里kg前面的数字(训练重量)REGEXEXTRACT(..., "-(\d+)x"):提取每组里-和x之间的数字(组数)REGEXEXTRACT(..., "x(\d+)"):提取每组里x后面的数字(每组次数)ARRAYFORMULA:让函数批量处理拆分后的所有训练组,不用手动下拉IFERROR:避免因格式错误(比如空值、不符合规则的条目)导致公式报错SUM:把所有训练组的容量(重量×组数×次数)相加得到总容量
方案二:用Apps Script自定义函数(更灵活)
如果你的训练数据格式偶尔有变动,或者需要更直观的函数名,用Google Apps Script写个自定义函数会更方便:
步骤:
- 打开你的Google Sheet,点击顶部菜单栏的「扩展程序」→「Apps Script」
- 删除编辑器里的默认代码,粘贴下面的JavaScript代码:
function CALCULATETOTALVOLUME(cellContent) { // 如果单元格为空,返回0 if (!cellContent) return 0; // 拆分每组训练数据 const trainingSets = cellContent.split(", "); let totalVolume = 0; // 循环处理每一组数据 trainingSets.forEach(set => { // 用正则匹配重量、组数、次数 const matchResult = set.match(/(\d+)kg-(\d+)x(\d+)/); if (matchResult) { const weight = parseInt(matchResult[1]); const setCount = parseInt(matchResult[2]); const repCount = parseInt(matchResult[3]); // 累加单组容量到总容量 totalVolume += weight * setCount * repCount; } }); return totalVolume; }
- 点击编辑器顶部的保存按钮,给你的项目起个名字(比如「TrainingVolumeCalculator」)
- 回到Google Sheet,在任意单元格输入
=CALCULATETOTALVOLUME(A1),就能得到A1单元格的训练总容量,下拉公式还能批量处理整列数据
自定义函数优势:
- 函数名更直观,容易理解和使用
- 如果你的数据有小数点(比如
80.5kg-3x5),只需要把正则里的(\d+)改成(\d+\.?\d*)就能适配 - 可以轻松扩展逻辑,比如增加对不同格式的兼容,或者过滤无效数据
关于Google Data Studio的使用
如果需要在Data Studio里分析这些数据,只需要在Google Sheet里先计算好总容量列,然后把这个Sheet作为数据源导入Data Studio即可,直接用计算好的列做可视化分析。
内容的提问来源于stack exchange,提问作者bullfighter




