有条件地根据日期格式化单元格

时间:2018-04-12 18:36:58

标签: google-apps-script google-sheets date-comparison

我希望将基于脚本的格式设置为颜色代码日期列。

第1行是标签。 Cols C-E包含日期;这些是我想要按日期颜色格式的单元格。我在条件中以黄色开始,一旦我粘贴这个障碍就会添加更多颜色。

希望检查每个细胞并适当地着色。当前版本无缘无故地着色细胞块,显然是按行。范围(C2:E9)和(C13:E13)的所有三列均为黄色,而C10:E12和C14:E14保持正常。所有这些范围内的许多日期都是相同的。

我的代码:

function formatting() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses');
  var columnO = sheet.getRange(2, 3, sheet.getLastRow() - 1, 3);//the range starts at column 3.  
  var oValues = columnO.getValues();
  
  for (var i = 0; i < oValues.length; i++) {
     for(var j = 2; j <= 4; j++) {//j=2 is actually column 5
       //convert dates from GMT to local
       var thisDay = new Date();
       var todayLocal = thisDay.toLocaleString();
       var bullDate = new Date(oValues[i][0]);
       var bullLocal = bullDate.toLocaleString();
  
       if (bullLocal < todayLocal) {
         sheet.getRange(i + 1, j + 1, 1, 1).setBackgroundColor('yellow');
      }
    }
  }
}

我认为还有其他方法可以做到这一点,但试图在我的代码中提高效率。想法?

1 个答案:

答案 0 :(得分:0)

在你的函数中,范围从第3列开始,因此实际上在第1行第3列找到了oValues [0] [0]。

试试这个:

function formatting() {
  var sheet=SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Form Responses');
  var rg=sheet.getDataRange();//this range starts at column 1
  var vA=rg.getValues();
  var today = new Date();
  for(var i=0;i<vA.length; i++){
    for(var j=2;j<=4;j++){//j=2 is the third column
      var bullDate = new Date(vA[i][j]);  
      if (bullDate < today){
        sheet.getRange(i+1,j+1).setBackgroundColor('yellow');
      }
    }
  }
}