Google表格-为有色单元格分配数值,然后在另一列中将SUM值一起分配

问题描述

我不确定是否可以这样做,但我想尝试将数字值分配给特定的颜色,然后将这些值求和并在不同的列中显示结果。

Example of required output

上面的图像将是绿色+绿色+灰色= 7和绿色+红色+绿色= 6的理想输出。 我希望能够为绿色,3、1和0的任何单元分配绿色,然后将它们加起来以显示在“每月总积分”列I中。

解决方法

解决方案:

您可以使用自定义公式,该公式使用getBackground()来获取单元格背景色的十六进制值,并根据颜色和点之间的映射:

function getPoints(row,column) {

  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet();  
  const start_cell = sh.getDataRange().getCell(row,column);    
  const cells_range = start_cell.offset(0,1,3);
  const cells_bg = cells_range.getBackgrounds().flat();    
  const colors_src_range = sh.getRange('C1:E1');
  const colors_source = colors_src_range.getBackgrounds().flat();
  const colors_pts = colors_src_range.getValues().flat().map(cv=>cv.replace( /^\D+/g,''));

  var total_pts = 0;  
  cells_bg.forEach(cbg=>{
  colors_source.forEach( (col,index)=>{
  total_pts += cbg == col ? parseInt(colors_pts[index]) : 0
  });})
  
  return total_pts;
}

然后,您可以将其用作工作表中的公式:getPoints(row,column),需要为其指定具有颜色的最左侧单元格的坐标(示例中的 C列)它将返回颜色行的总点数。

更新:

  • 脚本从以下位置自动获取十六进制值: 范围C1:E1,因此您无需手动传递 值。
  • 脚本还会自动提取每种颜色的点数 使用正则表达式。
  • 代码得到了更优化,因为它使用getBackgrounds()而不是getBackground()

示例:

例如,此公式:

=getPoints(row(C6),column(C6))

将导致以下结果:

example


参考文献:

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...