我正在尝试使用Google表格为我的餐厅制作视觉旋转。我需要计算一行的背景颜色,以获得当天工作的半小时数的数字。
以下是google表格的链接:
https://docs.google.com/spreadsheets/d/19IEDGZypi3nVt55-OayvPo__pbV0sTuRQ3wCJZ1Mhck/edit?usp=sharing
我正在使用的脚本:
function countBG(range, colorref) {
var sheet = SpreadsheetApp.getActiveSheet();
var color = sheet.getRange(colorref).getBackground();
var range = sheet.getRange(range);
var rangeVal = range.getValues();
var count = 0;
var allColors = range.getBackgrounds();
for (var i = 0; i < allColors.length; i++) {
for (var j = 0; j < allColors[0].length; j++) {
if (allColors[i][j] == color) count += 1;
};
};
return count;
}
我发现该脚本第一次运行时会运行,但之后会出错:
未找到范围(第4行,文件&#34;代码&#34;)
感谢任何有助于此工作的帮助,我是Google表格和脚本的新手,因此可能会遗漏一些明显的东西。
谢谢,
DB。
答案 0 :(得分:0)
如果您想将其作为自定义函数运行,并且只使用一行作为输入,这将起作用。
您传递行变量,如=countBG("D6:AH6")
function countBG(input) {
var sheet = SpreadsheetApp.getActiveSheet();
var colors = sheet.getRange(input).getBackgrounds();
var count = 0;
Logger.log(colors);
for (var i = 0; i < colors.length; i++) {
for (var j = 0; j < colors[0].length; j++) {
if (colors[i][j] != "#ffffff") count += 1;
};
};
Logger.log(count);
return count;
}
答案 1 :(得分:0)
出于某种原因,SpreadsheetApp.getActiveSheet().getRange(...)
仅给我一个值矩阵,而不是实际范围。
我的解决方案(请注意此处的范围是String
)
function countColoredCellsInRange(countRange, expectedBackground) {
var range = SpreadsheetApp.getActiveSpreadsheet().getRange(countRange);
var backgrounds = range.getBackgrounds();
var coloredCellsAmount = 0;
for (var i = 0; i < backgrounds.length; ++i) {
for (var j = 0; j < backgrounds[i].length; ++j) {
var currentBackground = backgrounds[i][j];
if (currentBackground == expectedBackground) {
++coloredCellsAmount;
}
}
}
return coloredCellsAmount;
};
用法示例:
=countColoredCellsInRange("Sheet!A2:A" ; "#00ff00")
此外,here就是它的示例(在“进度图”表中计算百分比)。