【问题标题】:Google Sheets' macro for changing a cell background color depending on input text用于根据输入文本更改单元格背景颜色的 Google 表格宏
【发布时间】:2019-04-11 19:53:55
【问题描述】:

我想在 Google 表格中为以下情况制作一个宏

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

只要我输入ABC(在Jth 列中),单元格背景颜色应分别变为“绿色”、“黄色”和“红色”。

我该怎么做?

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

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:
    • 您要更改已编辑单元格的背景颜色,只有在“J”列中输入“A”、“B”和“C”时。
    • 标题和标签中的“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);
    }
    

    参考资料:

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

    【讨论】:

    • 您好,感谢您的回答。虽然我似乎没有让它工作。我已将OnEdit 函数放入脚本编辑器并保存。现在如何将它应用于 J 列?
    • @RC0993 感谢您的回复。我带来的不便表示歉意。当您使用示例脚本 1 时,将以下脚本复制并粘贴到脚本编辑器并保存后,请将值放入“J”列。这样,脚本将自动运行。可以在here查看官方文档。对了,请使用Spreadsheet的容器​​绑定脚本。
    • @RC0993 作为测试样本,这个流程怎么样? 1. 创建新的电子表格。 2. 打开脚本编辑器,复制并粘贴示例脚本 1 并保存。 3. 返回工作表并将“A”放入单元格“J1”。这样,单元格的背景颜色变为“绿色”。
    • 我已经意识到示例脚本有效,但不适用于该列中的合并行。
    • 嘿,谢谢,这行得通 :) 合并不是问题,实际上我不得不删除已经存在的值“A”,然后不得不重新放置
    猜你喜欢
    • 2021-03-23
    • 2022-01-20
    • 2017-12-27
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多