在 Google 表格中使用条件格式根据日期更改单元格值(文本)?
Change cell value (text) based on date with conditinal formatting in Google Sheets?
我有问题。我们正在为我们的一个内部产品制作一个规划工具。在此工具中,我们可以手动切换项目(在本例中为包裹)的状态(下拉菜单)(E 列)。根据状态,它最终出现在员工计划概览选项卡之一中。但是,每个包裹都有一个离线日期(G 列)。该日期是包自动下线的时间。根据离线日期,我想自动将单元格状态切换为 'Offline'。问题是这个单元格也可以手动更改(对于其他状态)。
我在想,条件格式可能有一个技巧,也可以更改单元格内的值/文本。当当前日期是 'offline date' 或晚于离线日期时,条件格式会将单元格的状态更改为:“离线”。
有人有这方面的诀窍吗?提前致谢!
Link 例如 sheet:Whosebug example date changes cell sheet
如果 G 列中随附的离线日期等于函数 运行 的日期,则此函数会将 E 列中的状态更改为 'Offline'。
脚本:
function changeStatusToOffline() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
var lastRow = sheet.getLastRow();
// column E for status
var statusRange = sheet.getRange(2, 5, lastRow - 1, 1);
var statusValues = statusRange.getValues();
// column G for offline dates
var offlineDateRange = sheet.getRange(2, 7, lastRow - 1, 1);
var offlineDateValues = offlineDateRange.getValues();
// set time properties of today to 0 to compare date values only
// do the same with the individual offline dates later
var todayDate = new Date();
todayDate.setHours(0,0,0,0);
var todayTime = todayDate.getTime();
// generate status output during iteration of date values
var statusOutput = offlineDateValues.map((offlineDateValue, index) => {
// the same with today's date
var offlineDate = new Date(offlineDateValue);
offlineDate.setHours(0,0,0,0)
var offlineTime = offlineDate.getTime();
// if trigger date value is same as offline date value, change status to offline
if (todayTime == offlineTime)
return ['Offline'];
// use existing value if date are not the same
return statusValues[index];
});
// set the status range by bulk
statusRange.setValues(statusOutput);
}
注:
- 通过运行手动测试脚本
- 如果它成功完成了您需要的操作,那么继续设置每日触发器并在特定时间每天触发上述功能。 (例如每天凌晨 12 点)
- 如果触发日期等于离线日期,这只会更新状态。 (这使得触发器将状态更改为离线一次)
- 只有将离线日期更改为更晚的日期,才能在该日期再次运行脚本时自动更新状态。
之前:
之后:
我有问题。我们正在为我们的一个内部产品制作一个规划工具。在此工具中,我们可以手动切换项目(在本例中为包裹)的状态(下拉菜单)(E 列)。根据状态,它最终出现在员工计划概览选项卡之一中。但是,每个包裹都有一个离线日期(G 列)。该日期是包自动下线的时间。根据离线日期,我想自动将单元格状态切换为 'Offline'。问题是这个单元格也可以手动更改(对于其他状态)。
我在想,条件格式可能有一个技巧,也可以更改单元格内的值/文本。当当前日期是 'offline date' 或晚于离线日期时,条件格式会将单元格的状态更改为:“离线”。
有人有这方面的诀窍吗?提前致谢!
Link 例如 sheet:Whosebug example date changes cell sheet
如果 G 列中随附的离线日期等于函数 运行 的日期,则此函数会将 E 列中的状态更改为 'Offline'。
脚本:
function changeStatusToOffline() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Sheet1');
var lastRow = sheet.getLastRow();
// column E for status
var statusRange = sheet.getRange(2, 5, lastRow - 1, 1);
var statusValues = statusRange.getValues();
// column G for offline dates
var offlineDateRange = sheet.getRange(2, 7, lastRow - 1, 1);
var offlineDateValues = offlineDateRange.getValues();
// set time properties of today to 0 to compare date values only
// do the same with the individual offline dates later
var todayDate = new Date();
todayDate.setHours(0,0,0,0);
var todayTime = todayDate.getTime();
// generate status output during iteration of date values
var statusOutput = offlineDateValues.map((offlineDateValue, index) => {
// the same with today's date
var offlineDate = new Date(offlineDateValue);
offlineDate.setHours(0,0,0,0)
var offlineTime = offlineDate.getTime();
// if trigger date value is same as offline date value, change status to offline
if (todayTime == offlineTime)
return ['Offline'];
// use existing value if date are not the same
return statusValues[index];
});
// set the status range by bulk
statusRange.setValues(statusOutput);
}
注:
- 通过运行手动测试脚本
- 如果它成功完成了您需要的操作,那么继续设置每日触发器并在特定时间每天触发上述功能。 (例如每天凌晨 12 点)
- 如果触发日期等于离线日期,这只会更新状态。 (这使得触发器将状态更改为离线一次)
- 只有将离线日期更改为更晚的日期,才能在该日期再次运行脚本时自动更新状态。