我已经找到一种使用Google Spreadsheet提供的脚本功能来做到这一点的方法。
方法如下:
- 打开电子表格
- 在菜单中,转到工具->脚本编辑器...; 这将打开一个新窗口,允许您输入代码
- 复制下面的代码
- 将代码粘贴到“脚本编辑器”窗口中,然后按CTRL+ S保存
- 关闭脚本编辑器窗口,然后返回电子表格
码:
function getBackgroundColor(rangeSpecification) {
var sheet = SpreadsheetApp.getActiveSheet();
var cell = sheet.getRange(rangeSpecification);
return cell.getBackground();
}
function sumWhereBackgroundColorIs(color, rangeSpecification) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var range = sheet.getRange(rangeSpecification);
var x = 0;
for (var i = 1; i <= range.getNumRows(); i++) {
for (var j = 1; j <= range.getNumColumns(); j++) {
var cell = range.getCell(i, j);
if(cell.getBackground() == color)
x += parseFloat(cell.getValue());
}
}
return x;
}
function countCellsWithBackgroundColor(color, rangeSpecification) {
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var range = sheet.getRange(rangeSpecification);
var x = 0;
for (var i = 1; i <= range.getNumRows(); i++) {
for (var j = 1; j <= range.getNumColumns(); j++) {
var cell = range.getCell(i, j);
if(cell.getBackground() == color)
x++;
}
}
return x;
}
完成上述步骤后,电子表格中将提供另外三个功能:
countCellsWithBackgroundColor(<color>, <range specification>)
sumWhereBackgroundColorIs(<color>, <range specification>)
getBackgroundColor(<cell specification>)
请注意,<range specification>
和<cell specification>
以A1表示法表示,并且必须用引号引起来。
例如,要获取背景颜色设置为白色的 B2:F13范围内所有单元格的计数,您应该输入以下公式:
=countCellsWithBackgroundColor("white", "B2:F13")
并使用以下公式计算相同单元的总和:
=sumWhereBackgroundColorIs("white", "B2:F13")
某些单元格可能没有将背景设置为“白色”,“灰色”之类的颜色,而是将RGB颜色设置为#6fa8dc
。您无法猜测颜色是什么,因此,如果要找出单元格的颜色(例如B9
),则应在单元格中输入以下公式:
=getBackgroundColor("B9")
然后将此值用作上述两个函数的参数。
看来,如果单元格的背景色是“主题色”,则getBackground()
总是错误地返回#ffffff
。除了使用标准设置中的颜色外,我没有找到其他解决方法。
同样,请注意上述所有示例中的引号;没有它们,公式将无法工作。