【发布时间】:2019-01-14 20:23:20
【问题描述】:
我正在努力实现以下目标。在谷歌备用表中,我有一张值为“AllValues”的工作表,在另一张工作表“Randomvalues”中,我想从工作表“AllValues”中获取随机值。
我尝试了两个选项,首先我尝试了 randbetween 公式:
=INDEX(AllValues!A4:A103,RANDBETWEEN(1,COUNTA(AllValues!A4:A103)),1)
它正在工作,但它会在所有时间列更改时刷新/重新计算新值。谷歌了很多,似乎没有什么可以冻结已经计算的结果。
接下来我尝试了函数:
function random() {
var sss = SpreadsheetApp.getActiveSpreadsheet();
var ss = sss.getSheetByName('Values'); //the sheet that has the data
var range = ss.getRange(1,1,ss.getLastRow(), 4); //the range you need: 4 columns on all row which are available
var data = range.getValues();
for(var i = 0; i < data.length; i++)
{
var j = Math.floor(Math.random()*(data[i].length)); //method of randomization
var element = data[i][j]; // The element which is randomizely choose
ss.getRange(i+1, 6).setValue(element);
}
}
但是这个功能对我不起作用,谷歌备用表在第 11 行给出错误,不允许 setVaue。
第 11 行:ss.getRange(i+1, 6).setValue(element);
google了这个,有很多建议,但是我对功能不是很熟悉,我没有设法让它工作。
希望有人可以帮助我。
【问题讨论】:
-
在您的情况下,您是否将该函数作为自定义函数运行?如果是这样,就会发生这样的错误。使用自定义函数时,即使脚本没有修改,脚本保存时也会刷新自定义函数。所以虽然我不确定你的情况的细节,例如,在脚本编辑器和自定义菜单中运行该功能怎么样?
-
感谢您的评论。我什至不确定我是否将它作为自定义函数运行。这就是我的做法:在谷歌备用我选择“工具”>“脚本编辑器”然后我创建了脚本并尝试在我的谷歌备用表单元格中使用它,在“随机()”中输入 - 我不是很熟悉脚本和谷歌备用。
-
感谢您的回复。在您的情况下,您使用的函数是a custom function。那么例如,直接在脚本编辑器中运行函数,如“运行->运行函数->随机()”怎么样?
-
我为我糟糕的英语水平道歉。我曾建议通过脚本编辑器和自定义菜单运行脚本作为解决方法。这样,值将作为不是公式的字符串放入单元格中。所以值不会刷新。作为其他解决方法,使用事件触发器的
OnEdit怎么样?这也与第一个解决方法相同。但运行脚本的方法不同。 -
任务要求有些出入。起初,您只提到了 1 个源列(范围
AllValues!A4:A103)和 1 个目标单元格(带有公式)。但是random()函数需要 4 列数据并将多个值写入第 6 列。准确地说,您希望最后看到的稳定结果(无需后续重新计算)是什么?
标签: google-apps-script google-sheets custom-function google-sheets-formula