在谷歌电子表格中计算相同颜色的单元格
Count the cells with same color in google spreadsheet
我试图计算具有相同背景颜色的单元格的数量,并将结果放在谷歌应用程序脚本中脚本的其他单元格中,但我不能这样做。我有下一个脚本,但不工作,我不知道这是问题:
function countbackgrounds() {
var book = SpreadsheetApp.getActiveSpreadsheet();
var range_input = book.getRange("B3:B4");
var range_output = book.getRange("B6");
var cell_colors = range_input.getBackgroundColors()[0];
var color = "#58FA58";
var count = 0;
for( var i in cell_colors )
if( cell_colors[i] == color ){
range_output.setValue(++count);
}
else {
return count;
}
}
如果您不想使用Google Sheets Power Tools手动编写代码,这是一个简单的解决方案:
注意:虽然这个工具在写这个答案的时候是免费的,但现在它是每年43.20美元或终身许可证89.95美元!
- 通过附加组件面板安装电动工具(Add-ons ->获得附加组件)
- 在电源工具侧边栏中单击Σ按钮,并在该菜单中单击"按颜色求和";菜单项
- 选择"模式单元格";使用您想要搜索 的颜色标记
- 选择"源范围"要计数的单元格
- 使用功能应设置为"COUNTA"
- 按"插入功能"键;然后你就完成了:)
function countbackgrounds() {
var book = SpreadsheetApp.getActiveSpreadsheet();
var sheet = book.getActiveSheet();
var range_input = sheet.getRange("B3:B4");
var range_output = sheet.getRange("B6");
var cell_colors = range_input.getBackgroundColors();
var color = "#58FA58";
var count = 0;
for(var r = 0; r < cell_colors.length; r++) {
for(var c = 0; c < cell_colors[0].length; c++) {
if(cell_colors[r][c] == color) {
count = count + 1;
}
}
}
range_output.setValue(count);
}
你可以使用这个工作脚本:
/**
* @param {range} countRange Range to be evaluated
* @param {range} colorRef Cell with background color to be searched for in countRange
* @return {number}
* @customfunction
*/
function countColoredCells(countRange,colorRef) {
var activeRange = SpreadsheetApp.getActiveRange();
var activeSheet = activeRange.getSheet();
var formula = activeRange.getFormula();
var rangeA1Notation = formula.match(/'((.*)',/).pop();
var range = activeSheet.getRange(rangeA1Notation);
var bg = range.getBackgrounds();
var values = range.getValues();
var colorCellA1Notation = formula.match(/',(.*)')/).pop();
var colorCell = activeSheet.getRange(colorCellA1Notation);
var color = colorCell.getBackground();
var count = 0;
for(var i=0;i<bg.length;i++)
for(var j=0;j<bg[0].length;j++)
if( bg[i][j] == color )
count=count+1;
return count;
};
然后在google表格中调用这个函数:
=countColoredCells(D5:D123,Z11)
这是一个工作版本:
function countbackgrounds() {
var book = SpreadsheetApp.getActiveSpreadsheet();
var range_input = book.getRange("B3:B4");
var range_output = book.getRange("B6");
var cell_colors = range_input.getBackgroundColors();
var color = "#58FA58";
var count = 0;
for( var i in cell_colors ){
Logger.log(cell_colors[i][0])
if( cell_colors[i][0] == color ){ ++count }
}
range_output.setValue(count);
}
前面的函数对我不起作用,所以我制作了另一个函数,使用上面的答案之一的相同逻辑:解析单元格中的公式以查找要检查的单元格的引用范围,然后寻找彩色单元格。你可以在这里找到一个详细的描述:谷歌脚本计数与参考颜色,但代码如下:
function countColoured(reference) {
var sheet = SpreadsheetApp.getActiveSheet();
var formula = SpreadsheetApp.getActiveRange().getFormula();
var args = formula.match(/='w+'((.*)')/i)[1].split('!');
try {
if (args.length == 1) {
var range = sheet.getRange(args[0]);
}
else {
sheet = ss.getSheetByName(args[0].replace(/'/g, ''));
range = sheet.getRange(args[1]);
}
}
catch(e) {
throw new Error(args.join('!') + ' is not a valid range');
}
var c = 0;
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
for (var i = 1; i <= numRows; i++) {
for (var j = 1; j <= numCols; j++) {
c = c + ( range.getCell(i,j).getBackground() == "#ffffff" ? 0 : 1 );
}
}
return c > 0 ? c : "" ;
}
相关文章:
- 我可以使用jqgrid的oncellselect事件根据单元格内容将文本颜色更改为蓝色吗
- 使用javascript下拉菜单更改表格单元格的颜色
- 数据表 ..如何根据表格的单元格值更改单元格的颜色
- 使用 javascript 为 HTML 表格单元格指定颜色
- Google Apps 脚本:尝试根据单元格的背景颜色发送电子邮件
- Google Apps 脚本,用于根据一个单元格的值对另一个单元格进行条件颜色格式设置
- 使用jsp更改表格单元格的颜色
- 如何更改编辑单元格上方单元格的背景颜色(Javascript、Google电子表格)
- 根据输入字段中键入的数字更改td单元格的颜色
- JavaScript 创建一个随机表生成器并为单元格分配颜色
- 如何在 javascript 中更改表格单元格的颜色
- 单元格背景颜色不会更改 JavaScript
- jQuery 基于事件类型的单元格的日期选取器背景颜色
- 根据单元格内容更改表格行的文本颜色,仅使用 css
- jQuery - 单击时,单击时始终更改表格单元格的背景颜色
- 如果表格是动态生成的,如何在单击时更改 html 单元格的颜色
- 如何更改Handsontable中已更改单元格的颜色
- 更改特定单元格的背景颜色
- 根据数据库中的值更改 td 单元格的颜色
- 单选按钮所在的颜色单元格被选中,但没有点击