在单元格更改时从所选范围返回随机日期

问题描述 投票:0回答:2
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);
    }     
  }

 }
}

实际上我只需要在单元格S1值改变时(每次都可以是其他值)执行RANDBETWEEN,而不是在任何单元格的每次更改时都执行RANDBETWEEN。

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

之后,在循环中它应检查是单位已售出或没有状态,跳过这些并通过使用RNDNUM返回随机日期(并且日期列表在A列中)。

不久,它不会返回任何结果。

我已经尝试检查RNDNUM并且它确实正确地返回它应该是什么,但是下一个值不会被返回 - rndDATE(如果它是重要值,应该返回的是日期格式)!

random google-apps-script google-sheets triggers
2个回答
0
投票

看起来你没有得到范围的值,但是范围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的评论扩展,然后this answer

&是一个按位'AND',它需要2个数字并返回一个数字。在Javascript中不鼓励使用它。要将字符串与数字组合,请使用+


0
投票

其实,

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

解决了案例。我不知道为什么('A'和RNDNUM)不适合范围格式?

© www.soinside.com 2019 - 2024. All rights reserved.