【问题标题】:Conditional Formatting to a specific column特定列的条件格式
【发布时间】:2018-08-03 23:56:34
【问题描述】:

我是谷歌表格的新手,我喜欢为特定列设置条件格式。

从第 8 行 D 列开始 我想根据单元格上的设置背景颜色 如果单元格内容如“通过”,则背景颜色应为绿色 (183,225,205) 如果单元格内容如“失败”,则背景颜色应为红色 (213,139,139) 如果单元格内容如“待定”,则背景颜色应为黄色 (252,232,178)

所以在编辑单元格时我想检查单元格的值

function onEdit(e){
    var actualSheetName = 
    SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName() 
    var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
    var allValuesOnColumA = ss.getRange("A1:A").getValues()
    var lastRow = allValuesOnColumA.filter(String).length + 1
    var range = ss.getRange(8, lastRow)
    conditionalFormatting(8, 4, (lastRow +1) -8, 1, actualSheetName)
}

我启动了一个条件格式化函数,但我无法让它工作。

   function conditionalFormatting(rowN, colN, optRows, optCols, spreadsheetName)
{
    var mySpreadsheet = SpreadsheetApp.getActiveSpreadsheet()
    var mySheet = mySpreadsheet.getSheetByName(spreadsheetName)
    var range1Values = mySheet.getRange(rowN,colN, optRows, optCols).getValues()
    //debugger
    for (var row in range1Values)
    {
        for (var col in range1Values[row])
        {
          for(var i=0, iLen=range1Values.length; i<iLen; i++)
          {
            if(range1Values[row][col] == 'pass') 
            {
              //debugger
              Logger.log('Local Row ' + locRow + ' Local Col ' + locCol)
              var pendingCell=mySheet.getRange(locRow, locCol)
              pendingCell.setBackground("green")
            }
            else if(range1Values[row][col] == 'fail')
            {
             // Logger.log('fail in')
              //mySheet.getRange(range1Values.offset(row, col, 1, 1).getA1Notation()).setBackgroundColor(213,139,139) //red
              //Logger.log('fail Out')
            }
            else if(range1Values[row][col] == 'pending')
            {
              //Logger.log('Pending in')
              //mySheet.getRange(range1Values.offset(row, col, 1, 1).getA1Notation()).setBackgroundColor(252,232,178) //Yellow
              //Logger.log('Pending Out')
            }
          }     
        }
    }
}

编辑:

所需的结果应如下所示:

【问题讨论】:

  • 是否有特定原因需要脚本?您可以突出显示所需的单元格,右键单击并选择条件格式。然后,如果text is exactly pass,您将选择格式单元格。
  • 您好 Torey,我有一个工作簿,我们每周添加 2-3 张新工作表。我一直在使用内置的条件格式;但是我想自动化这个过程。我认为使用 onEdit 事件会对我有所帮助。 Dan 帮助了我大部分需要的东西,我只需要检查单元格上输入的值是否。例如,用户可以输入:'Pass'、PASS'、'Passed' PASSED'、'passed'等。在 google sheet 上检查这个最简单的方法是什么?提前致谢。Edil
  • 丹的剧本看起来很棒。此外,您可能会强制为用户提供带有下拉列表的某些条目,而不是尝试猜测他们可能添加的每个组合。只需突出显示输入单元格,右键单击,选择data validation,将条件设置为list of items 并列出所有以逗号分隔的项目。

标签: google-sheets formatting conditional-statements


【解决方案1】:

试试这个(适用于具有关键字“通过”、“失败”和“待定”的单元格,从指定的 D 列的第 8 行开始):

function onEdit(e){
  var actualSheetName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName();
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = ss.getLastRow();
  conditionalFormatting(8, 4, (lastRow +1) - 8, 1, actualSheetName);
}

function conditionalFormatting(rowN, colN, optRows, optCols, spreadsheetName) {
  var mySpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var mySheet = mySpreadsheet.getSheetByName(spreadsheetName);
  var range1Values = mySheet.getRange(rowN,colN, optRows, optCols).getValues();
  for (var row in range1Values) {
    for (var col in range1Values[row]) {

      if (range1Values[row][col].toLowerCase() == 'pass' || range1Values[row][col].toLowerCase() == 'passed') {
        mySheet.getRange(Number(row)+rowN, Number(col)+colN).setBackground('green')
        Logger.log('Contents PASS')

      } else if (range1Values[row][col].toLowerCase() == 'fail' || range1Values[row][col].toLowerCase() == 'failed') {
        mySheet.getRange(Number(row)+rowN, Number(col)+colN).setBackgroundRGB(213,139,139)
        Logger.log('Contents FAIL')

      } else if (range1Values[row][col].toLowerCase() == 'pending') {
        mySheet.getRange(Number(row)+rowN, Number(col)+colN).setBackgroundRGB(252,232,178)
        Logger.log('Contents PENDING')

      } else {
        Logger.log('Contents did not meet any of the criteria')  
      }
    }
  }
}

出于好奇,您是否有理由不只是使用 Google 表格中的内置条件格式功能?尽管此代码有效,但我发现仅使用内置的条件格式功能要容易得多。

编辑(评论中的其他问题):

修改后的代码对关键字不区分大小写,还包括关键字“通过”和“失败”

希望这会有所帮助!

【讨论】:

  • 嗨,丹,感谢您的帮助。
  • 嗨,丹,感谢您的帮助。我一直在使用内置的条件格式;手头的问题是我们正在向工作簿添加新工作表(每周 2-3 次),我必须进入这些新添加的工作表并手动添加条件格式。我只是想自动化这个过程。我还有一个问题要问你,用户可能会在单元格中输入“通过”、“通过”、“通过”、“通过”、“通过”等,我需要检查它是否包含工作“通过”而不是区分大小写,我该如何做到这一点?再次感谢您的帮助。谢谢埃德
  • Edil,我修改了上面的代码以解决您的其他问题。处理区分大小写问题的最简单方法是在对照关键字检查字符串之前对其进行标准化(我使用.toLowerCase() 函数来执行此操作)。此外,您可以通过在 if 语句中添加条件来检查其他关键字(例如,检查“通过”||“通过”)
  • 感谢您的帮助。埃迪尔
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
  • 2018-11-12
  • 2021-03-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多