【发布时间】:2020-02-14 22:55:00
【问题描述】:
我正在尝试在 Apps 脚本中创建全局变量并避免使用 UserProperties 等内置函数。避免 UserProperties 的原因是因为我所有的 Web 应用程序用户都将共享相同的变量,这将导致他们的帐户混合在一起。我想创建具有生命周期的全局变量,直到您关闭选项卡/窗口。我无法使用用户属性,因为我需要以我自己的身份运行脚本,因为我在此 Web 应用程序中我的帐户下的电子表格中进行搜索。
function extractData(row){
extractEmail(row);
extractPoints(row);
extractUsername(row);
extractName(row);
extractType(row);
extractFamily(row);
return "success";
}
function extractEmail(row){
try{
var url = "https://docs.google.com/spreadsheets/d/1pIC6Lyx4Q0ZjEA5GURZ3gA5qLmUJ0_7yGPJQmr6-GnQ/edit?usp=sharing";
var sheet = SpreadsheetApp.openByUrl(url);
var subsheet = sheet.getSheetByName("Accounts");
var col = 2
Gemail = String(subsheet.getRange(Number(row), col).getValue());
}
catch(error){
Logger.log(error.message);
}
}
function extractPoints(row){
var url = "https://docs.google.com/spreadsheets/d/1pIC6Lyx4Q0ZjEA5GURZ3gA5qLmUJ0_7yGPJQmr6-GnQ/edit?usp=sharing";
var sheet = SpreadsheetApp.openByUrl(url);
var subsheet = sheet.getSheetByName("Accounts");
var col = 6;
Gpoints = Number(subsheet.getRange(Number(row), col).getValue());
}
function extractUsername(row){
var url = "https://docs.google.com/spreadsheets/d/1pIC6Lyx4Q0ZjEA5GURZ3gA5qLmUJ0_7yGPJQmr6-GnQ/edit?usp=sharing";
var sheet = SpreadsheetApp.openByUrl(url);
var subsheet = sheet.getSheetByName("Accounts");
var col = 4;
Gusername = String(subsheet.getRange(row, col).getValue());
}
function extractName(row){
var url = "https://docs.google.com/spreadsheets/d/1pIC6Lyx4Q0ZjEA5GURZ3gA5qLmUJ0_7yGPJQmr6-GnQ/edit?usp=sharing";
var sheet = SpreadsheetApp.openByUrl(url);
var subsheet = sheet.getSheetByName("Accounts");
var col = 3;
Gname = String(subsheet.getRange(row, col).getValue());
}
function extractType(row){
var url = "https://docs.google.com/spreadsheets/d/1pIC6Lyx4Q0ZjEA5GURZ3gA5qLmUJ0_7yGPJQmr6-GnQ/edit?usp=sharing";
var sheet = SpreadsheetApp.openByUrl(url);
var subsheet = sheet.getSheetByName("Accounts");
var col = 7;
Gtype = String(subsheet.getRange(row, col).getValue());
}
function extractFamily(row){
var url = "https://docs.google.com/spreadsheets/d/1pIC6Lyx4Q0ZjEA5GURZ3gA5qLmUJ0_7yGPJQmr6-GnQ/edit?usp=sharing";
var sheet = SpreadsheetApp.openByUrl(url);
var subsheet = sheet.getSheetByName("Accounts");
var col = 12;
Gfamily = String(subsheet.getRange(row, col).getValue());
Logger.log(Gfamily);
}
function definer(){
try{
Utilities.sleep(5000);
Logger.log(Gfamily);
var data = [Gemail, Gname, Gusername, Gpoints, Gtype, Gfamily];
return data;
}
catch(error){
Logger.log(error.message);
}
}
上面的代码是服务器端的。客户端调用每个函数以及已定义的行。客户端调用的第一个函数是extractData。记录全局变量 Gfamily 时,它会正确显示为 testers。在下一个函数之后:definer 从客户端调用,Gfamily 被记录为 null。如果我不清楚任何事情,请告诉我如何改进这个问题。以下是日志的屏幕截图: Screenshot: Stackdriver logs showing how Gfamily suddenly becomes undefined
【问题讨论】:
-
听起来您正在寻找会话变量,而不是全局变量。我不知道Google App Scripts,所以不知道有没有这个。
-
看起来确实如此,
Session类。 stackoverflow.com/questions/44573749/… -
我认为,在您的脚本中,当
launch()在脚本编辑器中启用和不启用 V8 的情况下运行时,second()中的Logger.log(globalVariable)显示test。那么我可以问你关于复制globalVariable gets logged as null问题的详细流程吗?顺便说一句,如果你想让用户使用相同的变量,使用getScriptProperties()而不是getUserProperties()怎么样?但是我不确定你的实际情况。所以如果这不是你想要的方向,我很抱歉。 -
您也许可以使用 UserProperties 而不是 ScriptProperties。
标签: javascript google-apps-script