我阅读了以下帖子,即 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 将更改为需要软件所有者审核,然后将向该所有者发送一封电子邮件。 预先感谢您的帮助!
我修改了代码以确保它与我的工作表、列名称、数字等的所有值匹配。它执行时没有错误,但不执行任何操作。 我计划根据时间运行触发器,比如每晚午夜,但首先要做一个事件才能使其正常工作。
需要注意的是,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");
}
}
}