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

如何向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列后,原数据插入的列顺序未同步调整,导致偏移。解决步骤:

  1. 确认Google Sheets表头顺序:A列(日期)、B列(Age)、C列(forceData1)、D列(forceData2)、E列(forceData3)
  2. 在GAS的appendRow中严格按照表头顺序传入数据(参考第一部分的Sheet1处理逻辑),确保每个字段对应正确列
  3. 检查ESP32发送的payload是否包含age参数,避免因参数缺失导致数据偏移

内容的提问来源于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 10:12:28