0

我有两个全局变量catDebcatCred
这些值在 func loadCategories 中定义,我认为应该可以在任何地方访问。但它没有更新功能。

var catDeb  ;  // line 26 of code  
var catCred ;  // line 27 of code

它们在打开电子表格时被初始化onOpen(a)
似乎没问题。

程序从这里开始:

function onOpen(e) {  // line 40 of code
  loadCategories(wsCredit);  
  loadCategories(wsDebit);  
}  

function loadCategories(ws){  
  if (ws === wsCredit) {  
      var col   = 1 ; // Credit  
      var lines = par.getRange(2,col,par.getLastRow(), 4).getValues();  
      catCred   = lines.filter(function(r){return r[0].length>0});  
  } else {  
    col    = 10 ; // Debit  
    lines  = par.getRange(2,col,par.getLastRow(), 4).getValues();  
    catDeb = lines.filter(function(r){return r[0].length>0});  
  }  
}  

但是当试图访问全局变量catDebcatCred时,它不会

function onEdit(e) {  
  var chosenCell = e.range;  
  
  var value = chosenCell.getValue();  
  var r     = chosenCell.getRow();  
  var c     = chosenCell.getColumn();  
  var p     = chosenCell.getSheet().getName();  
    
  if (p === wsDebit && r > 1) {  
    // altered Debit  
    if (c === coLevel1 ){  
        applyLevel1(value, r, deb);  
    } // shorter version
  }
}
function applyLevel1(value, r, db){  
  db.getRange(r , coLevel2).clearContent();  
  db.getRange(r , coLevel2).clearDataValidations();  
  db.getRange(r , coLevel3).clearContent();  
  db.getRange(r , coLevel3).clearDataValidations();  

    console.log("level 1 ="+db.getName());
    console.log(catCred);

  if (value != ""){
    if (db.getName() == 'Crédit'){
       var level   = catCred.filter(function (o) {return o[0] === value});
    } else {
       var level   = catDeb.filter(function (o) {return o[0] === value});
    };
    console.log(level);
    var options = level.map(function (o) {return o[1]});
    var cell    = db.getRange(r , coLevel2);

    applyValidation(options, cell);
  }
  leaveBlank(r, db);
}

如果我使用 de Débit 表,则会出现错误:

2 lug 2021, 20:11:26 Errore ReferenceError: catDeb is not defined at unknown function

如果我去信用表错误catCred

我究竟做错了什么。

TIA(又名提前致谢)

4

1 回答 1

0

在 Google Apps 脚本中,全局变量不会在执行之间持续存在。而是使用其他方法来存储这些值。其中一些选项是使用电子表格、属性和缓存服务。

于 2021-07-02T21:13:51.397 回答