Игнорирование пустых ячеек в пользовательском скрипте Google Sheets - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь создать формулу для расчета Net Промоутерский балл в Google Sheets. У меня есть формула работает, но только когда я указываю точный диапазон. Моя проблема в том, что этот лист c со временем будет расти вместе с данными, и я не хочу повторного выбора диапазона. Что я хочу сделать, это выбрать всю строку и просто позволить ему автоматически обновлять счет NPS. Моя проблема с этим подходом состоит в том, что каждая пустая ячейка считается нулем, что портит мои проценты. Как я могу заставить мою функцию игнорировать пустые ячейки ???

Вот моя попытка:

/**
    This is a custom formula that calculates the Net Promoter Score.
    @customFunction
    */
function NPS(numArr) {

  var detractors = new Array();
  var passive = new Array();
  var promoters = new Array();

  var i = 0;

  for (i = 0; i < numArr.length; i++) {
    if (isNaN(numArr[i])) {
      console.log(numArr[i]);
    } else {
      if (numArr[i] >= 9) {
        promoters.push(numArr[i]);
      } else if (numArr[i] === 7 || numArr[i] === 8) {
        passive.push(numArr[i]);
      } else if (numArr[i] <= 6) {
        detractors.push(numArr[i]);
      }
    }
  }


  var promoPercentage = promoters.length / numArr.length;
  var detractorsPercentage = detractors.length / numArr.length;

  return (promoPercentage - detractorsPercentage) * 100;
}

1 Ответ

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

Вы можете использовать функцию JavaScript filter [1] для фильтрации пустых значений из получаемого массива (numArr). Также обратите внимание, что вы выбираете диапазон ячеек, поэтому аргументом будет двумерный массив [2], где каждое значение является массивом «строк», заполненным значениями столбцов для этой строки, на случай, если вам просто нужно первое значение каждой строки (для диапазона в один столбец, например, A1: A25) вам необходимо получить доступ к первому элементу каждого массива «строки», чтобы получить фактическое значение:

function NPS(numArr) {

  var detractors = new Array();
  var passive = new Array();
  var promoters = new Array();

  var i = 0;

  //Filter empty elements
  numArr = numArr.filter(function(element) {
    return element[0] !== '';
  })

  for (i = 0; i < numArr.length; i++) {
    if (isNaN(numArr[i][0])) {
      console.log(numArr[i][0]);
    } else {
      if (numArr[i][0] >= 9) {
        promoters.push(numArr[i][0]);
      } else if (numArr[i][0] === 7 || numArr[i][0] === 8) {
        passive.push(numArr[i][0]);
      } else if (numArr[i][0] <= 6) {
        detractors.push(numArr[i][0]);
      }
    }
  }

  var promoPercentage = promoters.length / numArr.length;
  var detractorsPercentage = detractors.length / numArr.length;

  return (promoPercentage - detractorsPercentage) * 100;
}

[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

[2] https://developers.google.com/apps-script/guides/sheets/functions#arguments

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...