无论我做什么,我都会在标题中得到错误。如果我用标准替换我的脚本
function doGet(e) {
var params = JSON.stringify(e);
return HtmlService.createHtmlOutput(params);
}
来自谷歌自己的例子:https://developers.google.com/apps-script/guides/web#url_parameters 我必须运行它一次(在脚本编辑中)才能不再显示错误,但是当我将代码放回原位时,它会停留在该虚拟函数的输出上。可能是因为我无法在没有错误的情况下运行自己的函数(见下文)。
Web 应用部署的设置:
- 版本: 1
- 执行身份:我
- 访问:任何人,甚至是匿名的
我认为这与必须运行一次函数有关(或者至少对我来说是这样),但我无法运行我的函数,因为它依赖于 url 参数。这显然在 e.parameter == 未定义时已经失败了。
function doGet(e) {
Logger.log(JSON.stringify(e));
var result = 'Ok';
if(e.parameter == undefined) {
result = 'no param';
}
else {
var id = 'id is normally here obviously not now';
var sheet = SpreadsheetApp.openById(id).getActiveSheet();
var newRow = sheet.getLastRow()+1;
var rowData = [];
for (var param in e.parameter) {
var value = stripQuotes(e.parameter[param]);
Logger.log(param + ': ' + e.parameter[param]);
switch (param) {
case 'timeStampBegin': //Parameter
rowData[0] = value; //Value in column B
break;
case 'timeStampEnd':
rowData[1] = value;
break;
default:
result = 'unsupported parameter';
}
}
Logger.log(JSON.stringify(rowData));
var newRange = sheet.getRange(newRow, 1, 1, rowData.length);
newRange.setValues([rowData]);
}
return ContentService.createTextOutput(result);
}
function stripQuotes( value ) {
return value.replace(/^["']|['"]$/g, "");
}
我很感激任何建议,为什么会发生这种情况,或者我如何使用测试输入运行我的函数。
在添加任何新服务(例如.HTML服务、电子表格服务等)后,确实需要在 IDE 中运行一次脚本,以便从安全角度批准这些更改。
要在不制作大量新版本并部署每个版本的情况下测试您的代码(即步骤 2-3),您可以在 Web IDE 中运行它,或者导航到"发布">"部署为 Web 应用程序...",然后单击"测试 Web 应用程序以获取最新代码"。与实时版本不同,该链接使用当前保存的任何代码,而不是上次部署的版本。
这是谷歌故意的,但这有点荒谬。显然,一个函数必须在编辑器中运行一次才能使用。但无论如何,它在这里:
- 创建一个空函数,为需要运行的函数生成所需的输入,并调用每个函数。如果它们互相调用,你只需要调用"parent"函数。
- 在"文件>管理版本"下创建新版本。
- 再次部署应用。在此过程中选择新版本。
我不确定 2+3 是否真的有必要,但对我来说,它仍然运行旧的虚拟代码(打印回 json)而不这样做。