Генератор случайных строк слишком часто рандомизируется - PullRequest
0 голосов
/ 20 мая 2018

Я ищу входные данные для небольшого проекта генератора случайных строк.

Я пытаюсь создать генератор случайных строк, который объединяет три слова, где я могу затем сохранить строки, которые мне нравятся, в другойпростынь.

Я использую базовый сценарий для назначения формулы RANDBETWEEN 3 конкретным ячейкам, которая прекрасно работает для генерации строк, но продолжает пересчитываться с каждым дополнительным шагом в сценарии, который кажется.Тогда я хотел бы запустить одну функцию, если мне нравится строка, я бы запустил другую функцию для хранения строки.Тем не менее, когда я пытаюсь, что он уже пересчитал формулы RANDBETWEEN, и он сохраняет что-то совершенно другое.

У меня есть пример листа здесь:
https://docs.google.com/spreadsheets/d/1TWziyjjLQJJApkHCqrLzNGMFU0sf-vNEOOSatuhHURo/edit?usp=sharing

И вот кодЯ использую для кнопок «Перейти» и «Сохранить» соответственно:

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 голосов
/ 20 мая 2018

RANDBETEE так же, как RAND, являются энергозависимыми функциями.Это означает, что их результаты меняются каждый раз, когда электронная таблица пересчитывается.

Если вам нужно какое-то время сохранять "случайное" рандомизированное значение, чтобы вместо этих функций рассмотреть одну альтернативу - использование пользовательской функциипоскольку они пересчитываются только при изменении хотя бы одного из его аргументов.

Связанные

Обновление данных, полученных пользовательской функцией в Google Sheet

...