【问题标题】:Change cell value (text) based on date with conditinal formatting in Google Sheets?根据日期在 Google 表格中使用条件格式更改单元格值(文本)?
【发布时间】:2021-11-01 14:35:13
【问题描述】:

我有疑问。我们正在为我们的一种内部产品制作计划工具。在此工具中,我们可以手动(下拉菜单)(E 列)切换项目(在本例中为包)的状态。根据状态,它最终出现在员工计划概览选项卡之一中。但是,每个包裹都有一个离线日期(G 列)。该日期是包裹将自动下线的时刻。根据离线日期,我想将单元格状态自动切换为“离线”。问题是这个单元格也可以手动更改(用于其他状态)。

我在想,可能有条件格式的技巧也可以更改单元格内的值/文本。当当前日期是“离线日期”或晚于离线日期时,条件格式会将单元格的状态更改为:“离线”。

有人对此有诀窍吗?提前谢谢!

示例表链接:Stackoverflow example date changes cell sheet

【问题讨论】:

  • 我想我明白了,但我认为最好的方法是使用脚本进行自动更改。想法是,一旦日期达到离线日期,状态将自动更改。问题是它只能自动更改为离线一次。当它自动更新为离线后手动更新时,您需要再次手动将其更新为离线,因为脚本只会在日期等于离线日期时自动更改状态,这样可以吗?如果是这样,请告诉我,以便我可以提供具有该行为的脚本。
  • 请注意,我上面所说的行为可以通过修改离线日期列或每天在特定时间运行(例如每天上午 12 点等)运行。我不认为条件格式可以更改单元格的价值。
  • 嗨@NaziA,这是正确的。这正是我正在寻找的。我后来也在考虑一个脚本,但是由于日期已经存在,因此 onChange / onEdit 的某些内容将无法正常工作。我想不出合适的剧本。如果你能在这里帮助我,那就太好了!

标签: date google-apps-script google-sheets conditional-formatting


【解决方案1】:

如果 G 列中伴随的离线日期等于函数运行的日期,则此函数会将 E 列中的状态更改为“离线”。

脚本:

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 点)
  • 这只会更新状态如果触发日期等于离线日期。 (这使得触发器将状态更改更改为离线一次)
  • 仅当您将离线日期更改为以后的日期时,当脚本再次在该日期运行时,才能自动更新状态。

之前:

之后:

【讨论】:

  • 真的很酷,完美运行。这是一个很酷的脚本,因为它可以以多种不同的方式使用。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 2019-11-20
  • 2013-11-29
  • 2022-09-29
相关资源
最近更新 更多