如何向Google Sheets两个工作表发送数据及相关问题求助
拳击力量测量项目Google Sheets数据同步解决方案
一、实现分表数据发送
通过在请求中携带目标工作表参数,让Google Apps Script根据参数将数据写入对应Sheet:
Google Apps Script 端修改
function doPost(e) { const targetSheet = e.parameter.sheet || "Sheet1"; const ss = SpreadsheetApp.openById("你的表格ID"); const sheet = ss.getSheetByName(targetSheet); // 处理Sheet1的forceData1-3 if (targetSheet === "Sheet1") { const force1 = e.parameter.forceData1; const force2 = e.parameter.forceData2; const force3 = e.parameter.forceData3; const age = e.parameter.age; const formattedDate = formatDate(e.parameter.date); // 严格对应表头顺序:日期(A)、Age(B)、forceData1(C)、forceData2(D)、forceData3(E) sheet.appendRow([formattedDate, age, force1, force2, force3]); } // 处理Sheet2的forceData4-5 else if (targetSheet === "Sheet2") { const force4 = e.parameter.forceData4; const force5 = e.parameter.forceData5; const formattedDate = formatDate(e.parameter.date); sheet.appendRow([formattedDate, force4, force5]); } return ContentService.createTextOutput("Data saved successfully"); }
ESP32/Arduino 端发送逻辑
分别封装发送到Sheet1和Sheet2的函数,携带sheet参数:
#include <HTTPClient.h> #include <WiFi.h> const char* ssid = "你的WiFi名称"; const char* password = "你的WiFi密码"; const char* scriptUrl = "你的Google Apps Script部署URL"; // 发送数据到Sheet1 void sendToSheet1(float force1, float force2, float force3, int age, String date) { if (WiFi.status() != WL_CONNECTED) return; HTTPClient http; http.begin(scriptUrl); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); String payload = "sheet=Sheet1&forceData1=" + String(force1) + "&forceData2=" + String(force2) + "&forceData3=" + String(force3) + "&age=" + String(age) + "&date=" + date; http.POST(payload); http.end(); } // 发送数据到Sheet2 void sendToSheet2(float force4, float force5, String date) { if (WiFi.status() != WL_CONNECTED) return; HTTPClient http; http.begin(scriptUrl); http.addHeader("Content-Type", "application/x-www-form-urlencoded"); String payload = "sheet=Sheet2&forceData4=" + String(force4) + "&forceData5=" + String(force5) + "&date=" + date; http.POST(payload); http.end(); }
二、修改日期格式为dd/mm/yyyy
两种方案可选,按需选择:
方案1:脚本端转换(兼容原有日期生成逻辑)
在之前的GAS代码中添加以下函数:
function formatDate(rawDate) { // 处理mm/dd/yyyy格式的原始日期 const [month, day, year] = rawDate.split("/"); return `${day}/${month}/${year}`; }
方案2:ESP32端直接生成目标格式
String getFormattedDate() { struct tm timeinfo; if (!getLocalTime(&timeinfo)) { return "00/00/0000"; } char dateBuf[11]; // %d=日(两位), %m=月(两位), %Y=年(四位) strftime(dateBuf, sizeof(dateBuf), "%d/%m/%Y", &timeinfo); return String(dateBuf); }
三、修复添加Age列后的数据错位问题
问题核心是添加Age列后,原数据插入的列顺序未同步调整,导致偏移。解决步骤:
- 确认Google Sheets表头顺序:A列(日期)、B列(Age)、C列(forceData1)、D列(forceData2)、E列(forceData3)
- 在GAS的
appendRow中严格按照表头顺序传入数据(参考第一部分的Sheet1处理逻辑),确保每个字段对应正确列 - 检查ESP32发送的payload是否包含
age参数,避免因参数缺失导致数据偏移
内容的提问来源于stack exchange,提问作者CoastVu
相关产品推荐
相关产品推荐

