【发布时间】:2019-11-15 06:51:14
【问题描述】:
我无法将变量从doGet() 传递到doPost()。当变量sheetName 被全局定义而没有任何逻辑来定义它时,它可以正常工作,但是当我使用doGet() 使用URL 参数来定义它时,它不会将表单提交数据加载到我的Google 表格中。基本上我正在尝试定义工作表名称,这样我就可以在同一个工作表中为单独的选项卡重用代码。将sheetName 更改为“Sheet2”可以正常工作并将数据传递到该工作表中(假设标题设置正确)。我觉得这可能是一个加载顺序,其中doGet() 在doPost() 之后被调用或其他什么?任何帮助将不胜感激。
我使用的代码的基础取自这里:https://forum.webflow.com/t/how-to-submit-html-form-directly-to-google-sheets/71432
我的scriptURL 是这样的:https://script.google.com/macros/s/KEY/exec?formUsed=Sheet1
我修改后的Code.gs代码如下:
var sheetName;
function doGet(request){
sheetName = request.parameter.formUsed;
return ContentService.createTextOutput(sheetName);
}
//var sheetName = 'Sheet1';
var scriptProp = PropertiesService.getScriptProperties();
function setup() {
var doc = SpreadsheetApp.getActiveSpreadsheet()
scriptProp.setProperty('key', doc.getId())
}
function doPost(e) {
var lock = LockService.getScriptLock()
lock.waitLock(10000)
try {
var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
var sheet = doc.getSheetByName(sheetName)
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
var nextRow = sheet.getLastRow() + 1
var newRow = headers.map(function(header) {
return header === 'timestamp' ? new Date() : e.parameter[header]
})
sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
return ContentService.createTextOutput(JSON.stringify({
'result': 'success',
'row': nextRow
})).setMimeType(ContentService.MimeType.JSON)
} catch (e) {
return ContentService.createTextOutput(JSON.stringify({
'result': 'error',
'error': e
})).setMimeType(ContentService.MimeType.JSON)
} finally {
lock.releaseLock()
}
}
【问题讨论】:
标签: javascript google-apps-script google-sheets google-sheets-api google-sheets-macros