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

如何通过Apps Script将Godot数据导入Google Sheets并使常量在首冻结列

解决方案:将Godot数据横向导入Google Sheets(首列固定常量名)

核心逻辑调整

原来的代码是把每一组请求参数作为一行追加到表格,现在调整为:

  • 首列(A列)固定存储所有参数名(如date、time、cate等),且冻结该列
  • 每收到一组新数据,就从首列找到对应参数名的行,在该行的下一个空白列写入对应值
  • 自动处理新出现的参数名(如果之前没在A列出现过,自动追加到A列末尾)

修改后的Apps Script代码

function doPost(e) {
  try {
    // 获取请求参数
    const params = e.parameter;
    if (!params.sheetname) {
      return ContentService.createTextOutput(JSON.stringify({status: "error", message: "缺少sheetname参数"}))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
    // 打开指定工作表
    const ss = SpreadsheetApp.getActiveSpreadsheet();
    const sheet = ss.getSheetByName(params.sheetname);
    if (!sheet) {
      return ContentService.createTextOutput(JSON.stringify({status: "error", message: "指定工作表不存在"}))
        .setMimeType(ContentService.MimeType.JSON);
    }
    
    // 冻结首列
    sheet.setFrozenColumns(1);
    
    // 获取首列所有已存在的参数名(A列数据)
    const firstColValues = sheet.getRange("A:A").getValues().flat().filter(val => val !== "");
    const firstColLastRow = firstColValues.length;
    
    // 遍历所有请求参数(排除sheetname本身)
    for (const [key, value] of Object.entries(params)) {
      if (key === "sheetname") continue;
      
      // 找到参数名在A列的行号
      let rowIndex = firstColValues.indexOf(key) + 1; // 行号从1开始
      
      // 如果参数名不存在,追加到A列末尾
      if (rowIndex === 0) {
        rowIndex = firstColLastRow + 1;
        sheet.getRange(rowIndex, 1).setValue(key);
        firstColValues.push(key);
      }
      
      // 找到当前行的第一个空白列
      const rowValues = sheet.getRange(rowIndex, 1, 1, sheet.getLastColumn()).getValues().flat();
      const colIndex = rowValues.findIndex(val => val === "") + 1;
      const targetCol = colIndex === 0 ? rowValues.length + 1 : colIndex;
      
      // 写入参数值
      sheet.getRange(rowIndex, targetCol).setValue(value);
    }
    
    // 返回成功响应
    return ContentService.createTextOutput(JSON.stringify({status: "success", message: "数据导入完成"}))
      .setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    return ContentService.createTextOutput(JSON.stringify({status: "error", message: error.toString()}))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

关键代码解释

  1. 参数校验:先提取请求参数,必填sheetname来指定目标工作表,避免操作错误表格
  2. 首列冻结:通过sheet.setFrozenColumns(1)固定首列,方便查看参数名
  3. 参数名匹配:读取A列所有已存在的参数名,判断当前参数是否已存在,不存在则自动追加到A列
  4. 空白列定位:对每个参数名所在行,找到第一个空列,写入新的参数值,实现横向追加
  5. 异常处理:捕获错误并返回JSON格式的错误信息,方便Godot端排查问题

验证方式

  1. 重新部署修改后的Apps Script(保持部署类型为Web App,权限按需设置)
  2. 在Godot端发送测试请求,比如你提供的示例URL:date=TODAY&time=NOW&cate=CATE&amount=AMOUNT&desc=DESC&flibble=SPONDS&sheetname=Sheet1
  3. 打开Google Sheets查看:A列会显示所有参数名,对应的值会在B列、C列等横向排列
  4. 再次发送一组新数据,会自动在每一行的下一个空列写入新值,实现横向扩展记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 04:54:54