При смене ячейки вернуть случайную дату из выбранного диапазона - PullRequest
0 голосов
/ 16 февраля 2019
function genRND(e) { 

  if (e.range.getA1Notation() === 'S1') {

   var AS = SpreadsheetApp.getActiveSpreadsheet();

   var DSTsheet = AS.getActiveSheet();

   var ED = DSTsheet.getRange('T1').getValue();
   var SD = DSTsheet.getRange('T2').getValue();

  for (var NR = 0; NR < 59; NR++){
   if (DSTsheet.getRange('E' & NR).getvalues() != '' && 
    DSTsheet.getRange('T' & NR).getvalues() != 'SOLD'){

     var RNDNUM = Math.floor(Math.random() * (ED-SD)) + SD; 
     var rndDATE = DSTsheet.getRange('A' & RNDNUM);

     DSTsheet.getRange('S' & NR).setValue(rndDATE);
    }     
  }

 }
}

Мне действительно нужно выполнять RANDBETWEEN только при изменении значения ячейки S1 (это может быть какое-то другое значение каждый раз), а не RANDBETWEEN при каждом изменении любой ячейки.

Итак, триггер установлен на S1, и он должен искать T1 и T2 для определения начала и конца диапазона.Math.random должен запустить некоторое число между этим диапазоном.Здесь все работает!

После того, как в цикле он должен проверить, является ли единица ПРОДАНО или без STATUS, пропустить их и вернуть случайную дату, используя RNDNUM (а список дат находится в столбце A).

Короче, в результате ничего не возвращается.

Я пытался проверить RNDNUM, и он правильно возвращает то, что должен, но следующее значение не возвращается - rndDATE (если это важное значение, которое должно быть возвращено, в формате даты)!

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

На самом деле,

var rndDATE = DSTsheet.getRange(RNDNUM, 1).getValue();
DSTsheet.getRange(NR, 21).setValue(rndDATE);

раскрытый случай.Я не знаю, почему ('A' & RNDNUM) не был правильным форматом диапазона?

0 голосов
/ 16 февраля 2019

Похоже, вы получаете не значение диапазона, а диапазон obj:

var RNDNUM = Math.floor(Math.random() * (ED-SD)) + SD; 
var rndDATE = DSTsheet.getRange('A' + RNDNUM).getValue(); //Get value, not Range Obj

DSTsheet.getRange('S' + NR).setValue(rndDATE);

Расширение на основе комментария Tanaike и затем этот ответ :

& - это побитовое 'И', которое ожидает 2 числа и возвращает число.Его использование не рекомендуется в Javascript.Чтобы объединить строку с числом, используйте +.

...