我正在从10个不同的传感器导入每小时的传感器数据。简而言之,我希望能够看到每小时的数据何时超过了一周中某一天和一天中某一时间的平均使用率。
我已经创建了命名为每个传感器名称的表(例如,“32022”),每个表都是日期的26列矩阵,从00:00到23:00的所有小时,以及从日期中提取星期几的WEEKDAY()函数。
在一个单独的工作表("Daily Usage")中,我为每个传感器手动创建了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.
的错误,我认为这是因为我不能像引用任何普通的工作表那样引用命名范围。
发布于 2019-05-30 06:11:04
由于getRangeByName(name)
方法返回Range
而不是NamedRange
,因此您需要从写入usagerange
的方法中删除参数和getRange()
方法(请注意,对于值Array
,day
和j
将从0开始)。此外,请确保将值写入循环外部的变量中,以减少服务调用:
var usageVals = usagerange.getValues();
//...loop
if(currentsheet.getRange(i,j).getValue() > usageVals[day-1][j-1]) {
//do something;
}
//...loop
https://stackoverflow.com/questions/56368316
复制相似问题