比较具有命名范围的单元格以进行条件格式化

时间:2019-05-29 20:50:44

标签: google-apps-script google-sheets google-sheets-formula

我正在从10个不同的传感器中导入每小时的传感器数据。简而言之,我希望能够看到每小时数据何时超过一周中该天和一天中的时间的平均使用量。

我创建了名为每个传感器名称的表(例如,“ 32022”),并且每个表都是日期的26列矩阵,所有时间从00:00到23:00,以及WEEKDAY()函数从日期中提取星期几。

在另一张纸上(“每日使用量”),我为每个传感器按小时手动创建了10个不同的每日平均使用量矩阵,其中A列是星期几(按名称),接下来的24列是全天候这些矩阵中的每个矩阵都被命名为“ averageusage_32022”。

我正在尝试遍历所有数据,并确定在该特定日期/时间哪些数据高于平均值,如果超出平均值,则将该单元格的背景更改为红色。

从我收集到的信息来看,我无法引用条件格式的命名范围,这就是为什么我希望通过编程方式解决此问题。

  var currentsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("32033");
  var usagerange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('averageusage_32033');

  //how many rows there are in the sheet
  var firstcolumn = currentsheet.getRange("A1:A").getValues();
  var bottomrow = firstcolumn.filter(String).length; 

  //loop through every day, check day of week, iterate through each hour, compare cell to "averageusage" range

  for (var i = 2; i < bottomrow; i++){
    var day = currentsheet.getRange(i,26).getValue;
    for (var j = 2; j < 26; j++){
      if (currentsheet.getRange(i,j).getValue() > usagerange.getRange(day,j).getValue()){
        currentsheet.getRange(i,j).setBackground("red");
        }
     }
   }  

我收到的错误为Cannot find function getRange in object Range.,我认为这是因为我无法像任何普通图纸一样引用命名范围。

1 个答案:

答案 0 :(得分:1)

由于getRangeByName(name)方法返回Range而不是NamedRange,因此您需要从写入getRange()的参数中删除参数和usagerange方法(请请注意,dayj对于值Array将基于0。另外,请确保将值写入循环外的变量中以减少服务调用:

var usageVals = usagerange.getValues();
//...loop
if(currentsheet.getRange(i,j).getValue() > usageVals[day-1][j-1]) {
  //do something;
}
//...loop