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
相关产品推荐
相关产品推荐

