Google apps script 有条件地格式化电子表格单元格

Google apps script 有条件地格式化电子表格单元格,google-apps-script,google-sheets,gs-conditional-formatting,Google Apps Script,Google Sheets,Gs Conditional Formatting,我正在尝试创建一个谷歌应用程序脚本,它可以让我快速确定是否需要通过改变单元格的颜色来采取进一步的行动。目前,我正在执行一个审计过程,在该过程中,我查看产品的5%是否存在错误。如果发现了太多错误,我需要查看产品的100% 我一直在尝试创建一个脚本,当满足错误阈值时,该脚本将更改单元格的颜色,并且需要满足以下标准。我会使用条件格式,但选择脚本,这样升级方法就不那么明显了,这样将来的扩展可以在需要时操纵文本格式 如果a1小于或等于50且b1小于,则四色单元格c1为绿色 如果a1小于或等于50且b1大

我正在尝试创建一个谷歌应用程序脚本,它可以让我快速确定是否需要通过改变单元格的颜色来采取进一步的行动。目前,我正在执行一个审计过程,在该过程中,我查看产品的5%是否存在错误。如果发现了太多错误,我需要查看产品的100%

我一直在尝试创建一个脚本,当满足错误阈值时,该脚本将更改单元格的颜色,并且需要满足以下标准。我会使用条件格式,但选择脚本,这样升级方法就不那么明显了,这样将来的扩展可以在需要时操纵文本格式

  • 如果a1小于或等于50且b1小于,则四色单元格c1为绿色
  • 如果a1小于或等于50且b1大于,则四色单元格c1为红色
  • 如果a1大于或等于50且b1小于a1的4%,则将单元格c1着色为绿色
  • 如果a1大于或等于50且b1大于a1的4%,则将单元格c1涂成红色
非常感谢您的任何帮助


函数onEdit(e){
var ss=e.source.getActiveSheet();
var r=e.source.getActiveRange();
如果(r.getRow()!=1和&ss.getName()=“条目表单”){
错误_Count=ss.getRange(r.getRow(),3.getValue();
rowRange=ss.getRange(r.getRow(),1,1,3);
如果(错误计数<3.8){
rowRange.setBackgroundColor(“#FF0000”);}
否则如果(错误计数='N/A'){
rowRange.setBackgroundColor(“#ffffff”);}
否则如果(错误计数>3.9){
rowRange.setBackgroundColor(“#ffffff”);
}
您提到了“未来的扩展”,但具体来说,获得“a1”、“b1”和“c1”并不是很容易扩展的

我的建议如下:

  • 使用获取“a1:c100”(a-c列有100行)。或者可以使用的
    getLastRow()
    ,然后使用,使a-c列中包含所有包含数据的行(我认为这是最好的主意)。
    • 现在你有你的
  • 使用
    getValues
    函数获取该范围的值。这将返回一个矩阵
  • 由于您的值在一个矩阵中,a1基本上是
    值[0][0]
    b1
    值[0][1]
    c1
    值[0][2]
  • 您可以轻松地循环遍历每个“行”值,如:

    for (var i = 0; i < values.length; i ++) {
    // do your comparisons for each row.
    // row[0] is "a_rowNumber", row[1] is "b_rowNumber", etc.
    var row = values[i];
    
    请记住,i是行,3是列c:将1添加到行中,因为数组从索引0开始,但电子表格上的实际行号(由
    getRange()
    使用)从1开始

  • 一旦你有了要在c列中着色的区域(此时为一个单元格),就可以使用。事实上,有很多方法可以设置背景颜色,使用RGB、十六进制颜色值或简单的颜色值,如“红色”。选择吧

  • 编辑:以下是如何访问所需数据以及如何使用数据的示例:

    function onEdit(e) {
      // Get the variable "sheet" so that we can get more ranges and set colors later
      var sheet = e.source.getActiveSheet();
      // Get the edited cell so we can look at the current row
      var cell = e.source.getActiveRange();
      // Get the current row (which is the same row where the cell was edited)
      var editedRow = cell.getRow();
    
      if (cell.getRow() != 1 && sheet.getName() == "Entry Form") {
        // Get the actual values in that row (the ones we want to use, which are columns A-C)
        var rowValues = sheet.getRange(editedRow, 1, 1, 3).getValues();
    
        // Your first condition is met: get the current row, column 3 (current row, C), set background color
        if (rowValues[0] <= 50 && rowValues[1] < 4) sheet.getRange(editedRow, 3).setBackgroundColor("green");
        // Your second condition is met: get the current row, column 3 (current row, C), set background color
        else if (rowValues[0] <= 50 && rowValues[1] > 4) sheet.getRange(editedRow, 3).setBackgroundColor("green");
        // Your third condition is met: get the current row, column 3 (current row, C), set background color
        else if (rowValues[0] >= 50 && (rowValues[1] < .04 * rowValues[0])) sheet.getRange(editedRow, 3).setBackgroundColor("green");
        // Your fourth condition is met: get the current row, column 3 (current row, C), set background color
        else if (rowValues[0] >= 50 && (rowValues[1] >= .04 * rowValues[0])) sheet.getRange(editedRow, 3).setBackgroundColor("green");
      }
    }
    
    函数onEdit(e){
    //获取变量“sheet”,以便以后可以获得更多范围并设置颜色
    var sheet=e.source.getActiveSheet();
    //获取已编辑的单元格,以便查看当前行
    var cell=e.source.getActiveRange();
    //获取当前行(与编辑单元格的行相同)
    var editedRow=cell.getRow();
    如果(cell.getRow()!=1&&sheet.getName()=“输入表单”){
    //获取该行中的实际值(我们要使用的值,即A-C列)
    var rowValues=sheet.getRange(editedRow,1,1,3).getValues();
    //满足第一个条件:获取当前行第3列(当前行,C),设置背景色
    如果(rowValues[0]=50&(rowValues[1]<.04*rowValues[0])sheet.getRange(editedRow,3).setBackgroundColor(“绿色”);
    //满足第四个条件:获取当前行第3列(当前行,C),设置背景色
    else if(rowValues[0]>=50&&(rowValues[1]>=.04*rowValues[0])sheet.getRange(editedRow,3).setBackgroundColor(“绿色”);
    }
    }
    
    所以我认为这是朝着正确的方向迈出的一步,但我认为我还不够清楚。下面是一个例子,根据b4-e中添加的条目,总件数并没有变化,错误计数也发生了变化。我尝试过处理您提供的内容,但并没有成功。我提前感谢您的帮助。若您尝试使用我给了你什么步骤,请发布一些代码,以便我可以帮助你找到错误。日志记录器和/或脚本编辑器中的执行记录也会有帮助:)我已经添加了我所拥有的,但我继续收到语法错误。-function onEdit(e){-if(e){var ss=e.source.getActiveSheet();-var r=e.source.getActiveRange();-if(r.getRow()!=1&&ss.getName()=“输入格式”){-Error_Count=ss.getRange(r.getRow(),38.getValue();-rowRange=ss.getRange(r.getRow(),1,1,3);if(Error_Count<3.8){-rowRange.setBackgroundColor(#FF0000”)-}如果(Error_Count='N/A'){rowRange.setBackgroundColor(#如果(Error#Count>3.9){rowRange.setBackgroundColor(“#ffffff”);最好用您的代码更新您的问题。不要在评论中发布类似的内容,因为评论的格式与帖子不同。我稍后会看一看……我更新了我的答案,以便更好地了解您应该使用此代码去哪里。我还添加了评论,以便您了解发生了什么。但是,您的电子表格中的A-C列没有数值……所以我不知道您打算如何进行比较。
    if (row[0] > 50 && row[1] < 4)
    
    getRange(i + 1, 3)
    
    function onEdit(e) {
      // Get the variable "sheet" so that we can get more ranges and set colors later
      var sheet = e.source.getActiveSheet();
      // Get the edited cell so we can look at the current row
      var cell = e.source.getActiveRange();
      // Get the current row (which is the same row where the cell was edited)
      var editedRow = cell.getRow();
    
      if (cell.getRow() != 1 && sheet.getName() == "Entry Form") {
        // Get the actual values in that row (the ones we want to use, which are columns A-C)
        var rowValues = sheet.getRange(editedRow, 1, 1, 3).getValues();
    
        // Your first condition is met: get the current row, column 3 (current row, C), set background color
        if (rowValues[0] <= 50 && rowValues[1] < 4) sheet.getRange(editedRow, 3).setBackgroundColor("green");
        // Your second condition is met: get the current row, column 3 (current row, C), set background color
        else if (rowValues[0] <= 50 && rowValues[1] > 4) sheet.getRange(editedRow, 3).setBackgroundColor("green");
        // Your third condition is met: get the current row, column 3 (current row, C), set background color
        else if (rowValues[0] >= 50 && (rowValues[1] < .04 * rowValues[0])) sheet.getRange(editedRow, 3).setBackgroundColor("green");
        // Your fourth condition is met: get the current row, column 3 (current row, C), set background color
        else if (rowValues[0] >= 50 && (rowValues[1] >= .04 * rowValues[0])) sheet.getRange(editedRow, 3).setBackgroundColor("green");
      }
    }