在 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++;
}
}
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
我是 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++;
}
}
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。