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

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]);
  
}

故障根因

  1. 核心问题:Web App 的 doGet 入口函数必须返回合法的响应对象(TextOutput/HtmlOutput 类型),原始代码执行完写入操作后没有任何返回值,就会触发你看到的无返回提示,快捷指令端接收不到有效响应也可能中断后续流程。
  2. 重新部署不生效:Google Apps Script 部署 Web App 时如果不手动选择「新建版本」,平台会一直运行旧版本代码,这是非常高频的部署踩坑点。
  3. 代码逻辑隐患:
    • 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:31:41