自动 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。
我正在为工作创建失物招领日志,我有一个下拉列表,其中包含“已收集”、“已发送给客人”、“已捐赠”等选项
我希望 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。