随机字符串生成器经常随机化

时间:2018-05-20 01:57:53

标签: google-apps-script google-sheets formulas

我正在寻找一个小型随机字符串生成器项目的输入。

我正在尝试创建一个随机字符串生成器,将三个单词放在一起,然后我可以将我喜欢的字符串保存到另一个表单中。

我正在使用基本脚本将RANDBETWEEN公式分配给3个特定单元格,这对于生成字符串很有用,但它会在脚本中的每个附加步骤中重新计算。我想运行一个函数然后如果我喜欢字符串我将运行另一个函数来存储字符串。但是,当我尝试它已经重新计算了RANDBETWEEN公式并且它保存了完全不同的东西。

我这里有一个示例表:
https://docs.google.com/spreadsheets/d/1TWziyjjLQJJApkHCqrLzNGMFU0sf-vNEOOSatuhHURo/edit?usp=sharing

以下是我分别用于“Go”和“Save”按钮的代码:

function generateString() { 

  var ss = SpreadsheetApp.openById('1b9rP39sgZDOZqu7AmZhOxX9J8CMukmUw7NPY3Qzuq78'); 
  var sheet = ss.getSheetByName('Randomizer'); 
  var cell = sheet.getRange('D4');
  var cell2 = sheet.getRange('E4');
  var cell3 = sheet.getRange('F4');
  cell.setValue('=INDEX(A:A,RANDBETWEEN(1,counta(A:A)))'); 
  cell2.setValue('=INDEX(A:A,RANDBETWEEN(1,counta(A:A)))');
  cell3.setValue('=INDEX(A:A,RANDBETWEEN(1,counta(A:A)))');

  var cell4 = sheet.getRange('P4');
  cell4.copyTo (sheet.getRange ('P5'), {contentsOnly: true});  //an attempt to paste values to record the random string

}

function saveString() {

  var ss = SpreadsheetApp.openById('1b9rP39sgZDOZqu7AmZhOxX9J8CMukmUw7NPY3Qzuq78'); 
  var sheet = ss.getSheetByName('Randomizer'); //replace with source Sheet tab name
  var range = sheet.getRange('P4'); //assign the range you want to copy
  var data = range.getValues();

  var tss = SpreadsheetApp.openById('1b9rP39sgZDOZqu7AmZhOxX9J8CMukmUw7NPY3Qzuq78'); 
  var tsheet = tss.getSheetByName('Saved Strings'); //replace with destination Sheet tab name
  tsheet.getRange(tsheet.getLastRow()+1, 1, 1, 1).setValues(data);

}

如果有人对如何正常工作有任何想法,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

RANDBETWEEN和RAND一样是易失性功能。这意味着每次重新计算电子表格时,其结果都会发生变化。

如果你需要将随机化结果保持“冻结”一段时间而不是这个函数,可以考虑使用自定义函数,因为只有在至少其中一个参数发生变化时才重新计算它们。

相关

Refresh data retrieved by a custom function in Google Sheet