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

ESP32向Google Sheets上传测力数据时单元格错位问题求助

问题分析与修复方案

核心问题点

  • 数组索引错误:JavaScript数组是0起始索引,原代码直接用rowData[1]/rowData[2]/rowData[4]赋值,导致数组前几位为空,写入表格时会填充空值到前列,引发错位。
  • 分请求写入不同行:forceData和forceData2作为独立请求,每次处理都调用getLastRow() + 1新建行,导致两组数据分散在不同行,不符合同行列布局的预期。
  • 冗余表格操作:两个case中重复打开同一表格,既冗余又影响执行效率。

修复后的代码

function doGet(e) {
  Logger.log(JSON.stringify(e));
  var result = 'Ok';
  if (!e.parameter) {
    result = 'No Parameters';
  } else {
    // 提前初始化表格对象,避免重复操作
    var ss = SpreadsheetApp.openById('SHEET_ID');
    var sheet = ss.getSheetByName('Sheet1');
    var targetRow = sheet.getLastRow() + 1;

    // 处理forceData,写入日期、时间、第一组测力数据到同一行
    if (e.parameter.forceData) {
      var value1 = stripQuotes(e.parameter.forceData);
      var currDate = new Date();
      var currTime = Utilities.formatDate(currDate, "Asia/Bangkok", 'HH:mm:ss');
      // 0起始索引对应表格A、B、C列
      var rowData = [currDate, currTime, value1];
      sheet.getRange(targetRow, 1, 1, rowData.length).setValues([rowData]);
      result = 'OK';
    }

    // 处理forceData2,写入同一行的D列(第4列)
    if (e.parameter.forceData2) {
      var value2 = stripQuotes(e.parameter.forceData2);
      sheet.getRange(targetRow, 4).setValue(value2);
      result = 'OK';
    }

    // 校验未识别参数
    for (var param in e.parameter) {
      if (param !== 'forceData' && param !== 'forceData2') {
        result = "unsupported parameter";
        break;
      }
    }
  }
  return ContentService.createTextOutput(result);
}

function stripQuotes(value) {
  return value.replace(/^["']|['"]$/g, "");
}

修复说明

  • 修正数组索引逻辑,用0起始数组直接对应表格列,避免空值占位导致的错位。
  • 统一获取目标行,确保两组数据写入同一行,符合预期布局。
  • 优化表格操作流程,提前初始化表格对象减少重复IO;forceData2直接写入指定列,无需创建空数组。
  • 优化参数校验逻辑,仅处理合法参数,其余参数返回错误提示。

效果对比

问题现象

问题现象

预期效果

预期效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:43:11