在细胞更改上,从选定范围返回随机日期


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);
    }     
  }
 }
}

我实际上只需要在单元格值更改(每次都可能是其他值)而不是在任何单元格之间进行randbetbetbetbetbetbetbet toke之间。

因此,触发设置为S1,它应该寻找T1和T2来检测范围的开始和结束。Math.random应该在该范围之间运行一些数字。一直以来一直在起作用!

之后,在循环中,它应该检查单位或没有状态,请跳过这些单元,并使用rndnum返回随机日期(日期列表在列中)。

很快,结果不会返回任何内容。

我已经尝试检查rndnum,它确实返回了应该返回的内容,但是下一个谷物未返回-rnddate(如果应该返回的重要值是日期格式)!

看起来您没有获得范围的值,而是范围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中不建议使用。要将字符串与一个数字组合,请使用+

实际上,

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

解决的情况。我不知道为什么('a'&amp; rndnum)不是正确的范围格式吗?

最新更新