有条件的格式

时间:2018-02-23 20:57:34

标签: google-sheets formatting conditional

我是google工作表的新手,我喜欢将条件格式设置为特定列。

从第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')
            }
          }     
        }
    }
}

有人可以帮帮我吗? 提前致谢

编辑:

期望的结果应如下所示: This is the desired Result

1 个答案:

答案 0 :(得分:0)

尝试此操作(适用于具有关键字'pass','fail'和'pending'的单元格,从第8行开始,对于列D指定):

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表格中的内置条件格式功能?虽然这段代码有效,但我发现使用内置的条件格式化功能要容易得多。

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

修改后的代码与关键字不区分大小写,并且还包含关键字“已通过”&amp; '失败'

希望这有帮助!