【问题标题】:On cell change return random date from selected range在单元格更改时从选定范围返回随机日期
【发布时间】:2019-02-22 00:00:54
【问题描述】:
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 应该在该范围之间运行一些数字。一直到这里都可以!

之后,在循环中它应该检查单位 SOLD 或没有 STATUS,跳过这些并使用 RNDNUM 返回随机日期(日期列表在 A 列中)。

简而言之,它不会返回任何结果。

我已尝试检查 RNDNUM,它确实正确返回了它应该返回的值,但没有返回下一个值 - rndDATE(如果它是重要的值,则应该返回日期格式)!

【问题讨论】:

    标签: random google-apps-script google-sheets triggers


    【解决方案1】:

    看起来您获取的不是范围的值,而是 Range 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

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

    【讨论】:

    • 虽然我认为您的指示是正确的,但&amp;的位运算符用于在此脚本中声明范围。在这种情况下,DSTsheet.getRange('A' &amp; RNDNUM) 会发生错误。那么如何从&amp; 修改为+?我认为这可能对其他用户有用。
    • @Tanaike,是的,就是这样,谢谢解释。猜猜我在 VBA 中工作太多所以自动放置 & 而不是 +
    【解决方案2】:

    其实

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

    解决的情况。我不知道为什么 ('A' & RNDNUM) 不是正确的范围格式?

    【讨论】:

    • 在您的情况下,&amp; 的按位运算符的使用类似于'A' &amp; RNDNUM。这样,这个结果就变成了0,当它用于DSTsheet.getRange('A' &amp; RNDNUM)这样的范围时,会发生错误,因为它是以DSTsheet.getRange(0)运行的。如果您想使用A1,请使用+ 运算符。所以它是DSTsheet.getRange('A' + RNDNUM)
    • @Tanaike thnx 进行解释。我真的很困惑为什么我总是出错
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 2014-07-10
    相关资源
    最近更新 更多