我设置了一个Google脚本来从mySQL数据库中获取数据。通过首先定义访问凭证的变量来设置脚本。例如:
var host = '123.45.67.89';
var user = 'username';
var password = 'password';
var port = '3306';
我的问题:这些凭据可能会更改。如果确实发生更改,我将不得不在每个脚本,使用它们的每个电子表格中对其进行更改。
我认为解决方案是设置一个脚本用作库,其唯一目的是定义这些变量。因此,所有这些脚本将是:
function setCredentials() {
var host = '123.45.67.89';
var user = 'username';
var password = 'password';
var port = '3306';
}
一旦将其设置为库并另存为“ DBCredentials”,我将设置每个SQL抓取脚本以仅从该库中调用这些变量。但是我无法正常工作。我确定我只是缺少从库中调用变量的正确方法,但是我没有用Google找到答案的运气。
我确实发现了这一点: Defining globals in Google Apps Script that can be used across multiple projects
因此,我将使用以下命令来调用变量:
var host = SpreadsheetApp.openById( DBCredentials.host );
但是,当我这样做时,会收到“错误值”错误。 我也尝试过:
var user = DBCredentials.user;
但这也不起作用。该脚本将运行,但是检查访问日志后,该脚本显示名为“ undefined”的用户试图访问数据库。
从库脚本中调用变量的正确方法是什么?
答案 0 :(得分:2)
桑迪(Sandy)的第二条评论使我得到了答案:
可以从函数内部设置GLOBAL,但是不能在函数内部使用var,否则变量将在函数内部作用域。因此,在任何函数的外部声明全局变量的值,如果要从函数内部设置全局变量的值,则不要使用var
我的错误是设置我的库脚本文件,即带有凭据的文件。我将具有设置凭据(主机,用户,密码,端口)的var放在函数中,如下所示:
function getCredentials() {
var host = '123.45.67.89';
var user = 'username';
var password = 'password';
var port = '3306';
}
这是我不正确的地方。我对此很陌生,因此我假设所有脚本都必须具有一个函数才能运行。将变量放在函数中会使这些变量仅作用于该函数,这就是为什么当另一个脚本调用这些变量时它们不传输OUT的原因。
我只是删除了变量周围的函数,将库脚本更改为仅此而已:
var host = '123.45.67.89';
var user = 'user';
var password = 'password';
var port = '3306';
然后,我可以使用以下方法从容器绑定脚本(与电子表格绑定的脚本)中调用这些变量:
var host = DBCredentials.host;
var user = DBCredentials.user;
var password = DBCredentials.password;
var port = DBCredentials.port;
(DBCredentials是为库脚本选择的标识符。)现在可以完美运行。非常感谢您的帮助!