【问题标题】:How do i write to next Column if Specific Column color changes如果特定列颜色发生变化,我如何写入下一列
【发布时间】:2021-10-27 16:36:50
【问题描述】:

我一直在尝试找到一种方式或方法,每当特定列单元格颜色为 紫色 更改为另一种颜色时,然后将当前日期和时间写入相应的列单元格。

https://docs.google.com/spreadsheets/d/1j9CzSkvZDcHTDFfCb4LxZ-gT4PLAiKOifi3NsWZJu3U/edit?usp=sharing

【问题讨论】:

  • 使用谷歌应用脚​​本的唯一方法是通过轮询。如果可以在客户端进行,则可以更快地进行轮询。
  • 我试图在 Google 上找到示例,但所有示例都是根据单元格值更改单元格颜色。没有上面执行的示例。如果你能写一些可能有助于实现这一目标的东西,我将不胜感激。
  • 轮询只是意味着去读取您希望更改的值并注意它何时更改。当然,你可以做到这一点。如果没有,那么我建议您开始学习。
  • 好的,谢谢@Cooper

标签: google-apps-script google-sheets google-sheets-formula


【解决方案1】:

建议:

您可以尝试使用getBackground() 方法获取所选范围的当前背景颜色,然后使用if 条件,如果它是紫色(在您的样本表上,紫色值是#ead1dc) .然后,您可以为您的脚本使用onChange() 事件类型installable trigger

更新:

这是一个示例实现:

function colorChangeCheck() { 
  var sh = SpreadsheetApp.getActive().getActiveSheet();
  var color = sh.getActiveRange().getBackground();
  var row = sh.getActiveRange().getRow();
  var col = sh.getActiveRange().getColumn();

  if(color == "#ead1dc" || color == "#ffffff"){ //Do nothing if the default color is #ead1dc (Purple) OR #ffffff (White)
    return;
  }else{
    if(sh.getRange(row, col+1).getBackground() == "#ffffff" && sh.getRange(row, col-1).getBackground() == "#ffffff"){ //Disregard if the row being changed is in white color
      return;
    }else{
      sh.getRange("L"+sh.getActiveRange().getRow()).setValue(Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM-dd-yyyy HH:mm:ss"));
    }
  }
}

示例:

表格:

添加并保存示例函数colorChangeCheckonChange() 可安装的触发事件类型。指导here

更新:将一紫色行改为蓝色,一白色行改为蓝色后的结果(改为蓝色的白色行没有时间戳):

【讨论】:

  • 非常感谢它工作得很好。但必须严格规定它只适用于purple imgur.com/fpbE6Ft 的特定颜色,您可以检查当我将颜色粘贴到默认颜色为白色时,它还会写入日期和时间。我插入了新行并它粘贴日期和时间
  • @ShRa 我已经对我的回答中的if 条件进行了一些更新。您可能还想查看JavaScript if else and else if 以更熟悉 if-else 条件
  • 非常感谢@Irvin Jay G。你太棒了。
  • 我想我无法详细说明,我只是希望每当紫色更改为默认的白色时,脚本应该可以工作。它不适用于任何其他颜色。除了紫色到默认白色@Irvin Jay G.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多