Google Apps Script运行无返回 苹果健康数据导入Sheets故障
Apple Health 导入 Google Sheets 脚本无返回值故障排查
故障现象
- Google Apps Script 运行后提示
The script completed but did not return anything - 脚本此前可正常运行,添加小数点转逗号的替换逻辑后功能失效,撤销更改重新部署仍未恢复
- iPhone 端配置了每日15点自动触发的 Shortcut 快捷指令推送健康数据,已确认 Apple Health 端2022年6月7日的对应数据存在,排除数据源缺失问题
- 需求背景:Apple Health 传输的数值使用小数点作为小数分隔符,芬兰地区本地使用逗号作为小数分隔符,因此添加了字符替换逻辑
当前Web App部署配置
- 部署类型:Web App
- 执行身份:本人(Me)
- 访问权限:任何人(Anyone)
原始问题代码
function doGet(e) { var healthSheet = SpreadsheetApp.openById("1RoviwpSK25qAjy02AILSuVTHbba4X4wULc0cNBKybQs").getSheetByName("Health"); var weight = JSON.parse(e.parameters.weight); var bfp = JSON.parse(e.parameters.bfp); var bmi = JSON.parse(e.parameters.bmi); var lbm = JSON.parse(e.parameters.lbm); var weightCom = String(weight).replace('.', ','); var bfpCom = String(bfp).replace('.', ','); var bmiCom = String(bmi).replace('.', ','); var lbmCom = String(lbm).replace('.', ','); var formattedDate = Utilities.formatDate(new Date(), "GMT-3", "dd.MM.yyyy"); healthSheet.appendRow([formattedDate,weightCom,bmiCom,bfpCom,lbmCom]); }
故障根因
- 核心问题:Web App 的
doGet入口函数必须返回合法的响应对象(TextOutput/HtmlOutput类型),原始代码执行完写入操作后没有任何返回值,就会触发你看到的无返回提示,快捷指令端接收不到有效响应也可能中断后续流程。 - 重新部署不生效:Google Apps Script 部署 Web App 时如果不手动选择「新建版本」,平台会一直运行旧版本代码,这是非常高频的部署踩坑点。
- 代码逻辑隐患:
e.parameters获取到的参数值本身是字符串数组(支持同参数名多值传参),直接做JSON.parse遇到非标准JSON格式的入参会直接抛错中断脚本- 字符串
replace('.', ',')只会替换第一个匹配到的小数点,多位小数(比如75.25)替换后会变成75,2.5,格式错误 - 时区配置错误:芬兰属于东二区/夏令时东三区,原始代码写的
GMT-3是西三区时区,和芬兰本地时差6小时,会导致写入的日期和实际日期不符
修复后代码
function doGet(e) { try { var healthSheet = SpreadsheetApp.openById("1RoviwpSK25qAjy02AILSuVTHbba4X4wULc0cNBKybQs").getSheetByName("Health"); // 直接取参数数组第一个值,无需JSON.parse var weight = e.parameters.weight[0]; var bfp = e.parameters.bfp[0]; var bmi = e.parameters.bmi[0]; var lbm = e.parameters.lbm[0]; // 全局匹配替换所有小数点为逗号,兼容多位小数 var weightCom = weight.replace(/\./g, ','); var bfpCom = bfp.replace(/\./g, ','); var bmiCom = bmi.replace(/\./g, ','); var lbmCom = lbm.replace(/\./g, ','); // 修正为芬兰时区,夏令时可按需调整为GMT+3 var formattedDate = Utilities.formatDate(new Date(), "GMT+2", "dd.MM.yyyy"); healthSheet.appendRow([formattedDate,weightCom,bmiCom,bfpCom,lbmCom]); // 返回标准JSON响应,供快捷指令端识别执行结果 return ContentService.createTextOutput(JSON.stringify({status: "success", msg: "data saved"})) .setMimeType(ContentService.MimeType.JSON); } catch (err) { // 捕获异常返回错误信息,方便快速定位问题 return ContentService.createTextOutput(JSON.stringify({status: "error", msg: err.message})) .setMimeType(ContentService.MimeType.JSON); } }
部署&验证注意事项
- 重新部署时,版本选项必须选择「新建」,不要沿用旧版本,否则代码修改不会生效
- 部署完成后可直接在浏览器拼接测试参数访问Web App地址,格式为
你的Web App地址?weight=72.5&bfp=22.3&bmi=23.1&lbm=56.2,验证表格是否正常写入、接口是否返回正确响应 - 快捷指令端建议添加响应判断逻辑,如果接口返回error状态可触发提醒,方便及时发现同步故障
内容的提问来源于stack exchange,提问作者realopa
相关产品推荐
相关产品推荐

