首页 > 解决方案 > 用于根据输入文本更改单元格背景颜色的 Google 表格宏

问题描述

我想在谷歌表中为以下情况制作一个宏

在工作表列中,比如列 J,允许的文本输入是“A”、“B”和“C”。

一旦我输入A,BC(在第Jth 列中),单元格背景颜色应分别变为“绿色”、“黄色”和“红色”。

我怎样才能做到这一点?

我对宏不太了解,我只是得到了这样做的任务。我能得到一些帮助吗?

标签: google-apps-scriptgoogle-sheets

解决方案


  • 你想改变编辑单元格的背景颜色,只有当“A”、“B”和“C”输入到“J”列时。
  • 您的标题和标签中的“Google 工作表宏”是 Google Apps 脚本。

如果我的理解是正确的,那么这两个示例脚本怎么样?请认为这只是几个答案之一。

示例脚本 1:

在此示例脚本中,使用了简单触发器的“OnEdit”事件。

流动:

  1. 检查编辑单元格的范围。如果范围是“J”列,则运行脚本。
  2. 检查输入的值。如果输入值为“A”、“B”和“C”,则背景颜色发生变化。
    • 如果输入的值不是“A”、“B”和“C”,则删除该值。

脚本:

请将以下脚本复制并粘贴到脚本编辑器中,然后保存。然后,请将值放入“J”列。

function onEdit(e) {
  if (e.range.getColumn() == 10) {
    var colors = {A: "green", B: "yellow", C: "red"};
    if (Object.keys(colors).indexOf(e.value) > -1) {
      e.range.setBackground(colors[e.value]);
    } else {
      e.range.setValue("");
    }
  }
}

笔记:

  • 在此示例脚本中,该脚本针对电子表格中的所有工作表运行。
    • 如果您想为特定工作表运行脚本,请告诉我。
  • 此示例脚本假设将一个值放入一个单元格中。
    • 如果您想将多个值放在“J”列的几行中,请告诉我。

示例脚本 2:

在此示例脚本中,将数据验证和条件格式规则都设置为“J”列。

流动:

  1. 设置数据验证
    • 这样,只有“A”、“B”和“C”的值可以放入“J”列。
  2. 设置条件格式规则
    • 这样,当“A”、“B”和“C”的值被放入“J”列的单元格中时,背景颜色被改变。

脚本:

请将以下脚本复制并粘贴到脚本编辑器中,然后保存。然后,myFunction()在脚本编辑器上运行。在此脚本中,该条件仅通过运行脚本一次来起作用。

function myFunction() {
  var rangeA1Notation = "J:J"; // Column "J"
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getRange(rangeA1Notation);

  // Set Data Validation
  var rule = SpreadsheetApp.newDataValidation().withCriteria(SpreadsheetApp.DataValidationCriteria.VALUE_IN_LIST, [["A", "B", "C"], false]).setAllowInvalid(false).build();
  range.setDataValidation(rule);

  // Set Conditional Format Rule
  var rules = sheet.getConditionalFormatRules();
  rules.push(SpreadsheetApp.newConditionalFormatRule().whenTextEqualTo("A").setBackground("green").setRanges([range]).build());
  rules.push(SpreadsheetApp.newConditionalFormatRule().whenTextEqualTo("B").setBackground("yellow").setRanges([range]).build());
  rules.push(SpreadsheetApp.newConditionalFormatRule().whenTextEqualTo("C").setBackground("red").setRanges([range]).build());
  sheet.setConditionalFormatRules(rules);
}

参考:

如果这些方法不是您想要的,我很抱歉。


推荐阅读