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

Google Sheets IoT数据记录器循环写入功能故障排查求助

解决ESP32数据循环写入Google Sheets的问题(环形缓冲区)

代码问题分析

你的代码存在两个核心错误:

  1. 行号获取逻辑错误:var lastrow = sheet.getRange(sheet.getLastRow(),1).activate 写法完全错误,activate()是选中单元格的方法,无法获取行号,正确获取最后一行行号应直接使用sheet.getLastRow()。
  2. 写入逻辑错误:appendRow()是在表格末尾追加新行,无法实现覆盖指定行的环形缓冲区效果,你需要直接定位到目标行写入数据。

假设你的表格第1行为表头(如日期、Sensor1、Sensor2),数据行范围是第2到第6行,写满后回到第2行覆盖旧数据。

修正后的代码

var sheet_id = "1SrNCSoqTT2wG__RKSHn51kYcknz8GWy7W9_MTecpKYI";
var sheet_name = "Datalog";
var START_ROW = 2; // 数据起始行(跳过表头)
var END_ROW = 6;   // 数据结束行

function doGet(e){
  // 解析请求参数,添加默认值避免参数缺失报错
  var sensor1 = Number(e.parameter.sensor1) || 0;
  var sensor2 = Number(e.parameter.sensor2) || 0;
  var date = String(e.parameter.date) || new Date().toLocaleString();

  var ss = SpreadsheetApp.openById(sheet_id);
  var sheet = ss.getSheetByName(sheet_name);
  var props = PropertiesService.getScriptProperties();
  
  // 获取当前要写入的行号,首次运行默认从START_ROW开始
  var currentRow = parseInt(props.getProperty("currentRow")) || START_ROW;
  
  // 写入数据到指定行
  sheet.getRange(currentRow, 1, 1, 3).setValues([[date, sensor1, sensor2]]);
  
  // 更新下一次写入的行号:写满END_ROW后回到START_ROW,否则行号+1
  currentRow = currentRow >= END_ROW ? START_ROW : currentRow + 1;
  props.setProperty("currentRow", currentRow);
  
  // 返回写入结果,方便ESP32端验证
  return ContentService.createTextOutput("Data written to row " + (currentRow === START_ROW ? END_ROW : currentRow - 1));
}

关键改进点

  • 使用PropertiesService记录当前写入行号,避免依赖getLastRow()(空行或删除数据会导致行号判断失效)
  • 用getRange().setValues()直接覆盖指定行,实现环形缓冲区逻辑
  • 增加参数默认值,避免因请求参数缺失导致代码报错
  • 返回明确的写入结果,便于ESP32端确认数据是否写入成功

HTTP触发器调试方法

  1. 模拟请求测试:在脚本编辑器中新建测试函数,手动模拟e参数:
function testDoGet() {
  var e = {
    parameter: {
      sensor1: "25.5",
      sensor2: "60",
      date: new Date().toLocaleString()
    }
  };
  doGet(e);
}

点击运行按钮直接执行,随后查看表格数据是否正确写入。

  1. 查看执行日志:每次触发doGet后,点击脚本编辑器右上角的「执行记录」,可查看每一步的执行详情。若需要更详细的日志,可在代码中添加Logger.log("当前写入行号:" + currentRow);,再到执行记录中查看日志内容。

  2. 手动URL测试:部署Web应用后,复制触发URL,在浏览器中手动拼接参数测试,例如:
    https://script.google.com/macros/s/你的部署ID/exec?sensor1=26&sensor2=65&date=2024-05-20%2010:30:00
    查看返回内容和表格数据是否匹配预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:02:35