如何通过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); } }
关键代码解释
- 参数校验:先提取请求参数,必填
sheetname来指定目标工作表,避免操作错误表格 - 首列冻结:通过
sheet.setFrozenColumns(1)固定首列,方便查看参数名 - 参数名匹配:读取A列所有已存在的参数名,判断当前参数是否已存在,不存在则自动追加到A列
- 空白列定位:对每个参数名所在行,找到第一个空列,写入新的参数值,实现横向追加
- 异常处理:捕获错误并返回JSON格式的错误信息,方便Godot端排查问题
验证方式
- 重新部署修改后的Apps Script(保持部署类型为Web App,权限按需设置)
- 在Godot端发送测试请求,比如你提供的示例URL:
date=TODAY&time=NOW&cate=CATE&amount=AMOUNT&desc=DESC&flibble=SPONDS&sheetname=Sheet1 - 打开Google Sheets查看:A列会显示所有参数名,对应的值会在B列、C列等横向排列
- 再次发送一组新数据,会自动在每一行的下一个空列写入新值,实现横向扩展记录
内容的提问来源于stack exchange,提问作者Reverend Speed
相关产品推荐
相关产品推荐

