Как посчитать количество невыделенных записей в строке в Excel или листах - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь проанализировать таблицу вопросов с несколькими вариантами ответов, у меня есть ключ, а неправильные ответы выделены желтым цветом, я ищу способ подсчитать количество правильных ответов в каждой строке. пытался перенести на листы и запустить этот код;

/**
 * Counts the number of items with a given background.
 *
 * @param {String} color The hex background color to count.
 * @param {String} inputRange The range of cells to check for the background color.
 * @return {Number} The number of cells with a matching background.
 */
function countBackground(color, inputRange) {
  var inputRangeCells = SpreadsheetApp.getActiveSheet().getRange(inputRange);
  var rowColors = inputRangeCells.getBackgrounds();
  var count = 0;

  for(var r = 0; r < rowColors.length; r++) {
    var cellColors = rowColors[r];
    for(var c = 0; c < cellColors.length; c++) {
      if(cellColors[c] == color) {
        count++;
      }
    }
  }

  return count;
}

Проблема в том, что у меня есть несколько сотен тестов, и по какой-то причине диапазон не меняется при изменении значений ячеек. Снимки того, что я пытаюсь набрать по строке

Изображение формата листа Изображение формата Excel

1 Ответ

0 голосов
/ 28 января 2020

выделенные ячейки и количество невыделенных ячеек на листе

Я бы порекомендовал вам удалить большинство строк на листе перед запуском этого.

function countCells() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getRange(1,1,sh.getMaxRows(),sh.getMaxColumns());
  var bA=rg.getBackgrounds();
  var ui=SpreadsheetApp.getUi();
  var nhlA=[];
  var n=0;
  var resp=ui.prompt('Default Background Dialog',"Using hex code like '#ffffff' please enter the default background color" ,ui.ButtonSet.OK_CANCEL);
  if(resp.getSelectedButton()==ui.Button.OK) {
    var dflt=resp.getResponseText();
    for(var i=0;i<bA.length;i++) {
      for(var j=0;j<bA[i].length;j++) {
        if(bA[i][j]!=dflt) {
          nhlA.push(sh.getRange(i+1,j+1).getA1Notation());
        }else{
          n++;
        }
      }
    }
  }
  var s=Utilities.formatString('Highlight Cells: %s <br />The Number of Non HighLighted cells: %s',nhlA.join(', '),n)
  var userInterface=HtmlService.createHtmlOutput(s);
  ui.showModelessDialog(userInterface, 'Non Highlight Cells')
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...