Google脚本:从库中定义变量

时间:2018-08-24 20:12:29

标签: google-apps-script

我设置了一个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”的用户试图访问数据库。

从库脚本中调用变量的正确方法是什么?

1 个答案:

答案 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是为库脚本选择的标识符。)现在可以完美运行。非常感谢您的帮助!