自动 select 特定日期后下拉菜单中的选项

Auto select an option from a dropdown after a certain date

我正在为工作创建失物招领日志,我有一个下拉列表,其中包含“已收集”、“已发送给客人”、“已捐赠”等选项

我希望 sheet 在特定日期后(可能在 1 个月后)自动 select 'Donated' 如果选项尚未 selected.

如果有人在 11 月 2 日输入了一副找到的手套,则空的下拉列表将在 12 月 2 日自动更改为 'Donated',除非有人已经 select 编辑了另一个选项(例如 'Collected')。

您可以通过使用 Apps 脚本 检查条件并进行相应的更改或直接执行 Sheets 函数.

  • 工作表函数

    您可以通过将此公式放在每个状态单元格上来获得所需的结果:

    =IF(TODAY()-D4>30,"Donated","")
    

    它将按预期工作,直到 TODAY() 日期和 D4 单元格中提供的日期之间有 30 天,单元格才会显示任何内容。如果有,单元格将显示 Donated。如果从下拉列表中选择了另一个选项,这将删除公式并且只显示新值。

    但是,这种方法更像是一种快速 hack 而非实际的稳健解决方案,因为有几处可能会出错。例如,如果不小心从下拉列表中选择了一个选项,然后再次将其留空,则该方法将不再适用于该行,因为公式将被永久删除。 您可以阅读 TODAY() 的工作原理 here


  • Apps 脚本(推荐)

    以下脚本将检查 sheet 中的每一行的状态单元格是否为空白,以及减去 DATE FOUND 是否超过 30 天(不幸的是,这必须在几毫秒内完成)。

function myFunction() {
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadSheet.getSheetByName("Sheet1");

  sheet.getLastRow()
  var range = sheet.getRange(4,1,sheet.getLastRow(), 7);
  //SELECT A RANGE WITH THE 7TH FIRST COLUMNS AND AS MANY ROWS AS NECESSARY 
  //(WE ARE INTERESTED IN DATA STARTING FROM ROW 4TH)

  var values = range.getValues();

  var millisecondsIn30Days = 30 * 24 * 60 * 60 * 1000;

  for(var row = 0; row<values.length; row++){
    var status = values[row][6]; //STATUS IS THE 6TH ELEMENT IN THE ROW ARRAY (COLUMN G)

    if(status == "" && (new Date() - values[row][3]) > millisecondsIn30Days){
      //MORE THAN 30 DAYS AFTER FOUND
      sheet.getRange(row+4,7).setValue("DONATED");      
    }
  }
}


当然,该脚本可以是手动 运行,也可以使用可安装的触发器自动执行该作业,例如每月 运行s。您可以阅读有关如何设置此类触发器的更多信息 here