【问题标题】:Conditionally formatting cells based on date根据日期有条件地格式化单元格
【发布时间】:2018-04-12 18:36:57
【问题描述】:

我希望使用基于脚本的格式来对日期列进行颜色编码。

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

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

【问题讨论】:

  • 您将日期作为字符串进行比较 - 为什么?直接比较它们,即date1 &lt; date2date1.getTime() &lt; date2.getTime()
  • 我之前在使用 GMT 格式的日期时遇到了一些问题,因此更改为本地日期虽然可以防止出现问题。我怀疑这不是当时的问题,回想一下,所以你可能是对的。
  • @tehhowch 你在这个项目早期给我的帮助让我走了很长一段路。
  • 阅读这篇文章stackoverflow.com/questions/49759420/…。并在比较中使用日期对象

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


【解决方案1】:

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

试试这个:

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');
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多