【问题标题】:Google App Script - Conditional Formatting Based on Another CellGoogle App Script - 基于另一个单元格的条件格式
【发布时间】:2015-05-03 12:41:28
【问题描述】:

我正在尝试弄清楚如何通过脚本在谷歌电子表格上使用条件格式,类似于您可以使用条件格式功能执行的操作。

我有两列分别标为“国家”和“州”。如果一个单元格中的值为“美国”,我希望脚本检查相邻的州列以确保它不是空白的。如果是,我希望单元格背景变为红色。

有没有办法在脚本中做到这一点?我不想使用内置功能,因为它不会复制到电子表格中新创建的工作表,因为我会让其他用户创建新工作表。

我找到了一些参考资料,但我无法根据自己的需要定制它们。

链接:Google Spreadsheet conditional formatting script

https://webapps.stackexchange.com/questions/16745/google-spreadsheets-conditional-formatting-based-on-another-cells-content

【问题讨论】:

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


    【解决方案1】:

    假设 Country 位于 (1,1),State 位于 (1,2),其中 (i,j) 表示电子表格上的第 i 行和第 j 列。 Google 电子表格是 1 索引的,这意味着索引从 1 开始。

    var activeSheet = SpreadsheetApp.getActiveSheet();
    
    for (var a = 2; a < activeSheet.getLastRow(); a++) {
       if (String(activeSheet.getRange(a,1).getCell(1,1)) === "United States") { 
           if (String(activeSheet.getRange(a,2).getCell(1,1)) === null) { 
              activeSheet.getRange(a, 2, 1, 1).setBackgroundColor('red'); 
           } 
       } 
    }
    

    【讨论】:

    • 我正在尝试测试它以查看它是如何工作的,以便我能够理解它.. 在 (1,1),那将是单元格 A1,对吗?
    • 我想我可能遗漏了一些东西,我一直在玩弄和修补一点没有任何结果(甚至没有一些错误)。有什么帮助吗?
    • 是的,很抱歉回复晚了,Google 表格的单元格 A1(第一个单元格)位于 (1,1)。您需要什么帮助?
    • 我只是在谷歌表格中尝试它,即使我打开一个新表格也无法正常工作。
    【解决方案2】:

    尝试将其复制并粘贴到空白脚本文件中。这取决于 A 列是 Country,B 列是 State,但是您可以根据需要制作任意数量的工作表,这将自动工作。

    如果您想了解特定部分的解释,请告诉我,因为我不确定您的脚本背景是什么。我在代码中包含了一些 cmets。

    function onEdit(e) {
    
      var ss = e.source;
      var sheet = ss.getActiveSheet();
      var range = sheet.getRange("A:B");
      var values = range.getValues();
    
      //for each row that data is present
      for(var i = 0; i < values.length; i++) {
        var cell = sheet.getRange(i + 1, 2);
    
        //check if the first value of that row is exactly "United States"
        if(values[i][0] === "United States") {
    
          //if it is, check for a blank cell.  If so, make it red.
          if(values[i][1] === "") {
            cell.setBackground('red');
          } else {
            cell.setBackground('white');
          }
    
        } else {
    
          //In any other case, make it white.
          cell.setBackground('white');
        }
      }  
    }    
    

    【讨论】:

    • 我只是一个初学者,我只完成了 codeacademy 课程,很快就会做 Team Treehouse。我只是想在 GAS 中构建一个数据验证脚本作为启动项目。在函数上,为什么我们有值 'e' ?我只是把它放到一个空白脚本中,它只拾取一些单元格并留下一些单元格,即使循环看起来应该遍历所有行直到没有数据?
    • 糟糕,我的逻辑写在那里,我不应该使用'break'命令。我更新了代码。 e代表Event Object,onEdit函数处理一个事件,编辑。如果你不使用它,你可以省略它,但把它放在那里并没有什么坏处。在更新后的代码中,我使用 e.source 来识别活动电子表格,而不是 SpreadsheetApp.getActiveSpreadsheet(),因此您可以看到一种使用方式。
    • 我没有使用 values = getDataRange,而是使用 values = getRange('A:B'),这可能比抓取数据的维度更有意义。
    • 假设我只想从列 A 和 B 中移开,我只需更改变量“范围”中的范围值,然后将“值”中的 1 更改为列的位置是(即列c,d),它看起来像这样? //check if the first value of that row is exactly "United States" if(values[i][3] === "United States") { //if it is, check for a blank cell. If so, make it red. if(values[i][4] === "") { cell.setBackground('red');
    • 记住数组从 0 开始,所以 C 列实际上是 2,D 是 3。但是为了让这一切变得美好和混乱,看看 cell.getRange() 定义,你会这也需要改变。此方法的参数是实际工作表的行和列,但它们不是从零开始的。因此,我们添加了一个 i 变量,该变量用于遍历 values 数组中的每一行。 B 列实际上是 2。因此,如果您要转移到 C:D 范围,这将是 cell.getRange(i + 1, 4)。在为电子表格编写脚本时,很容易犯一次性计数错误!
    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 2013-12-31
    • 2023-04-03
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多