如何根据日期自动设置下拉列表中的值

问题描述 投票:0回答:1

我阅读了以下帖子,即 2023 年。如何根据行中另一个单元格的值自动在下拉列表中设置值 - 应用程序脚本

我已经根据我的表单修改了它,但是,它没有做任何事情。没有错误,日志中没有任何内容。说已执行,但没有任何注释。这是我的代码:

`函数 onEdit(事件){ var colI = 9; // “I”的列号

  var changedRange = event.source.getActiveRange();
  if (changedRange.getColumn() == colI) {
    // An edit has occurred in Column I

    //Get the Due date and current date then set as same time.
    var doDate = changedRange.getValue().setHours(12, 0, 0);
    let today = new Date().setHours(12, 0, 0)

    //Get the difference of the 2 dates
    var dateDifference = Math.round((doDate - today) / 8.64e7)

    //Set value to dropdown depending on difference
    var group = event.source.getActiveSheet().getRange(changedRange.getRow(), colI - 1);
    if (dateDifference == 0) {
      group.setValue("Needs SW Owner Review");
    }
  }
}`

我知道我没有 else 语句,因为我只想在 Do Date 是今天的日期时将下拉菜单中的值更改为 Needs SW Owner Review。 需要注意的是,Do Date 列是一个指向 J 列的公式,即 SW Date。该日期字段由用户输入,I 列自动向其中添加 365 天。 如果该日期已过,则状态列 H 将更改为需要软件所有者审核,然后将向该所有者发送一封电子邮件。 预先感谢您的帮助!

我修改了代码以确保它与我的工作表、列名称、数字等的所有值匹配。它执行时没有错误,但不执行任何操作。 我计划根据时间运行触发器,比如每晚午夜,但首先要做一个事件才能使其正常工作。

google-sheets drop-down-menu scripting
1个回答
0
投票

需要注意的是,Do Date 列是一个公式,指向 J 列,即 SW Date。该日期字段由用户输入,I 列自动向其中添加 365 天。

嗯,确实应该指出:这就是问题所在。以下是 Google 有关简单触发器的指南的摘录:

当用户更改电子表格中任何单元格的值时,onEdit(e) 触发器会自动运行。

这意味着源事件的范围是用户编辑的单元格;当您的公式更改 I 列的值时,不会触发 onEdit

 函数。因此,代码中的第一个 
if
 语句永远不会是 
true
,因此该函数不会执行任何操作。

您需要做的是更改该条件以检查用户何时编辑 J 列:

function onEdit(event){ const colI = 9; // Column Number of "I" const sheet = event.source.getActiveSheet(); const changedRange = event.range; if (changedRange.getColumn() === (colI + 1)) { // An edit has occurred in Column J const row = changedRange.getRow(); //Get the Due date and current date then set as same time. const doDate = sheet.getRange(row, colI).getValue().setHours(12, 0, 0); const today = new Date().setHours(12, 0, 0); //Get the difference of the 2 dates const dateDifference = Math.round((doDate - today) / 8.64e7) //Set value to dropdown depending on difference const group = sheet.getRange(row, colI - 1); if (dateDifference == 0) { group.setValue("Needs SW Owner Review"); } } }
    
© www.soinside.com 2019 - 2024. All rights reserved.