将单元格与条件格式的命名范围进行比较
Comparing a cell with a named range for conditional formatting
我正在从 10 个不同的传感器导入每小时的传感器数据。简而言之,我希望能够看到每小时数据何时超过一周中的那一天和一天中的时间的平均使用量。
我创建了 sheets 命名每个传感器名称(例如“32022”)并且每个 sheets 都是日期的 26 列矩阵,所有从 00:00 到 23:00 的小时数,以及从日期中提取星期几的 WEEKDAY() 函数。
在单独的 sheet ("Daily Usage") 中,我为每个传感器手动创建了 10 个不同的按小时计算的日平均使用量矩阵,A 列是星期几(按名称) 以及接下来的 24 列是一天中的所有时间。这些矩阵中的每一个都被制成一个名为 "averageusage_32022".
的命名范围
我正在尝试遍历所有数据并确定哪些数据高于特定 day/time 的平均值,如果该单元格超过平均值,则将该单元格的背景更改为红色。
根据我收集到的信息,我无法引用条件格式中的命名范围,这就是我希望以编程方式解决此问题的原因。
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.
错误 我假设这是因为我无法像正常 sheet.
那样引用命名范围
由于 getRangeByName(name)
方法 returns Range
而不是 NamedRange
,您需要从写入 [= 的参数中删除参数和 getRange()
方法15=](请注意,对于值 Array
,day
和 j
将从 0 开始)。另外,确保将值写入循环外的变量以减少服务调用:
var usageVals = usagerange.getValues();
//...loop
if(currentsheet.getRange(i,j).getValue() > usageVals[day-1][j-1]) {
//do something;
}
//...loop
我正在从 10 个不同的传感器导入每小时的传感器数据。简而言之,我希望能够看到每小时数据何时超过一周中的那一天和一天中的时间的平均使用量。
我创建了 sheets 命名每个传感器名称(例如“32022”)并且每个 sheets 都是日期的 26 列矩阵,所有从 00:00 到 23:00 的小时数,以及从日期中提取星期几的 WEEKDAY() 函数。
在单独的 sheet ("Daily Usage") 中,我为每个传感器手动创建了 10 个不同的按小时计算的日平均使用量矩阵,A 列是星期几(按名称) 以及接下来的 24 列是一天中的所有时间。这些矩阵中的每一个都被制成一个名为 "averageusage_32022".
的命名范围我正在尝试遍历所有数据并确定哪些数据高于特定 day/time 的平均值,如果该单元格超过平均值,则将该单元格的背景更改为红色。
根据我收集到的信息,我无法引用条件格式中的命名范围,这就是我希望以编程方式解决此问题的原因。
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.
错误 我假设这是因为我无法像正常 sheet.
由于 getRangeByName(name)
方法 returns Range
而不是 NamedRange
,您需要从写入 [= 的参数中删除参数和 getRange()
方法15=](请注意,对于值 Array
,day
和 j
将从 0 开始)。另外,确保将值写入循环外的变量以减少服务调用:
var usageVals = usagerange.getValues();
//...loop
if(currentsheet.getRange(i,j).getValue() > usageVals[day-1][j-1]) {
//do something;
}
//...loop