在 Google Apps 脚本中通过引用在函数之间传递变量

Passing variables between functions by reference in Google Apps Script

我是 Google Apps 脚本的新手,几天前才开始学习它。我以前有 C++ 知识,但不多。

我尝试编写我的第一个脚本,在 google sheet 上执行一些操作。这是我到目前为止创建的代码:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();

function MainFunc() {
  var LoopCounter = 0;
  SaveDataInArray(LoopCounter);
  Logger.log(LoopCounter);
}

function SaveDataInArray(LoopCounter) {
  var InfiniteForLoopTrigger = 1;
  var range;
  var VolumeArray = [];
  var SignalArray = [];

  //Save Data in Array
  for(var i = 2; InfiniteForLoopTrigger > 0; i++){
    range = s.getRange(i, 1);
    if(range.isBlank()){
      break;
    }
    VolumeArray[LoopCounter] = s.getRange(i, 1).getValue();
    SignalArray[LoopCounter] = s.getRange(i, 2).getValue();
    LoopCounter++;
  }
}

我意识到 LoopCounter 的值在传递给函数 SaveDataInArray 后并没有改变。我知道在参数前面有一个符号 (&),比如

function SaveDataInArray(& LoopCounter)

有助于解决 C++ 中的问题,但我不知道如何在 Google Apps 脚本中处理它。

如果有人可以帮助我,我会很高兴。 谢谢并致以最诚挚的问候, 最大值

  • 您想使用 Google Apps 脚本通过引用调用该值。

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

问题和解决方法:

不幸的是,数字和字符串的变量不能用作引用调用。比如下面的脚本是运行时,在Logger.log.

可以看到0.0, 0, 1.0, 1.0
function work(a, b, c, d) {
  a = 1;
  b = "1";
  c[0] = 1;
  d.value = 1;
}

function run() {
  var a = 0;
  var b = "0";
  var c = [0];
  var d = {value: 0};
  work(a, b, c, d);
  Logger.log("%s, %s, %s, %s", a, b, c[0], d.value) // 0.0, 0, 1.0, 1.0
}

所以,在这种情况下,请使用如下对象。

模式 1:

在此模式中,数组用作对象。

function MainFunc() {
  var LoopCounter = [0];
  SaveDataInArray(LoopCounter);
  Logger.log(LoopCounter[0]);
}

function SaveDataInArray(LoopCounter) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var InfiniteForLoopTrigger = 1;
  var range;
  var VolumeArray = [];
  var SignalArray = [];

  //Save Data in Array
  for(var i = 2; InfiniteForLoopTrigger > 0; i++){
    range = s.getRange(i, 1);
    if(range.isBlank()){
      break;
    }
    VolumeArray[LoopCounter[0]] = s.getRange(i, 1).getValue();
    SignalArray[LoopCounter[0]] = s.getRange(i, 2).getValue();
    LoopCounter[0]++;
  }
}

模式二:

在此模式中,JSON 对象用作对象。

function MainFunc() {
  var LoopCounter = {value: 0};
  SaveDataInArray(LoopCounter);
  Logger.log(LoopCounter.value);
}

function SaveDataInArray(LoopCounter) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var InfiniteForLoopTrigger = 1;
  var range;
  var VolumeArray = [];
  var SignalArray = [];

  //Save Data in Array
  for(var i = 2; InfiniteForLoopTrigger > 0; i++){
    range = s.getRange(i, 1);
    if(range.isBlank()){
      break;
    }
    VolumeArray[LoopCounter.value] = s.getRange(i, 1).getValue();
    SignalArray[LoopCounter.value] = s.getRange(i, 2).getValue();
    LoopCounter.value++;
  }
}

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。