计算每行/相同背景颜色的单元格数

时间:2014-11-16 11:37:47

标签: google-sheets

我正在使用Google Spreadsheets,其中填充了Google表单的回复。现在,我有一个电子表格来自动着色包含"错误"通过比较单元格的值与每列的顶部单元格的响应(使用条件格式)。对于 CF到CH 列,我想设置为"得分"部分。

concept explanation example

通过上面的图片,我手动说明了我的最终目标:
我希望能够为每个行计算具有特定背景颜色(在这种情况下为浅红色1 [#de6666])的单元格,并在 CH 。从那里开始,我计划使用这个数字计算原始分数&通过与总问题数量进行比较得出百分比。


我做了一些搜索,希望得到一个已经回答的类似问题可能对我的情况有所帮助,并找到了这两个问题:(1) &amp; (2)。< / p>

现在,我完全不熟悉编码技术,如果我不正确理解或需要额外帮助,我想请你耐心等待我。 我的问题是,有没有办法调整这些以使其能够执行我想要执行的操作?或者是否需要全新的自定义功能?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,这是我的解决方案,适合我能看到你的需求。 它不完全通用,但只要你改变范围以满足你的需要它应该工作得很好。 我尽力解释那些令我困惑的部分,以便你可以根据需要进行调整。 祝你好运,希望这有帮助!

function countbackgrounds(){
  var book = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = book.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var cellColors = sheet.getRange(4, 1, lastRow-3, 57).getBackgrounds();//(startrow, startcolumn,numRows,numCols)
  /*since you want all rows and columns before CF:CH, since CF is column 58, you  want 57 columns.
  //to exclude your headers you want to start on a certain row, 
  //be mindful of which row number you are starting on, it looks to me like 4, 
  //so subtract 'startrow-1' from 'lastRow' so you code doesnt continue past your entries. */
  var colorY = "#de6666"; 
  var count = 0;
  for(var i = 0; i < cellColors.length; i++) {
    var thisRow = sheet.getRange(i+4, 60 ); //get output cell for this row in CH
    /*note: 'i' is an index number within the loop not the row number, if you are starting at another row 
    //you will need to change this, just add the 'startrow' number */
    for(var j = 0; j < cellColors[0].length ; j++) { 
      if(cellColors[i][j] == colorY) { 
        count = count + 1;
      };//end if statement
    };//end for each cell in a row 
    thisRow.setValue(count); 
    count = 0;//reset count to 0 before next row
  };//end for each row
};