【问题标题】:Ignoring empty cells in Google Sheets custom script忽略 Google 表格自定义脚本中的空单元格
【发布时间】:2020-01-27 21:19:29
【问题描述】:

我正在尝试创建一个公式来计算 Google 表格上的净推荐值。我的公式有效,但只有当我指定确切的范围时。我的问题是,随着时间的推移,这个特定的工作表会随着数据的增长而增长,我不想继续重新选择范围。我想要做的是选择整行,让它自动更新 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;
}

【问题讨论】:

  • numArr参数从何而来?
  • @AndrewLohr 它来自我在谷歌表格中突出显示的范围。例如,A2:A25
  • 抱歉,我不熟悉 google 表格集成 - 您是否完全控制 numArr 参数?从你所说的,听起来谷歌表只是把它传给你。无论您突出显示一个范围还是整行,数组的结构是否相同?
  • 是的,您可以控制阵列。调用函数时,使用光标选择范围
  • 您能否编辑您的问题,如何调用 NPS 函数?

标签: javascript google-apps-script google-sheets


【解决方案1】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 2021-12-01
    • 2012-08-30
    • 2020-11-24
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多