Google Apps脚本 - 根据另一个单元格的值设置活动单元格的公式

时间:2017-08-11 00:17:08

标签: google-apps-script google-sheets

我正在Google Apps脚本中编写自定义函数,如果某个其他单元格包含数字,则使用该单元格的值和其他几个单元格来计算结果。否则,如果某个其他单元格不包含数字,则该函数应该只返回一个空字符串,以便活动单元格显示为空白。
我能够提出一个工作函数来做到这一点,但为了保护敏感信息,我不打算在这里复制它。相反,这是一个完成相同事情的示例函数:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rowNum = sheet.getActiveCell().getRow();
  var rowVals = sheet.getRange(rowNum, 1, 1, 15).getValues();

  var fVal = rowVals[0][5];
  if (fVal == "" || isNaN(fVal)) {
    return "";    //leave cell blank if column F doesn't contain a number
  }

  var aVal = rowVals[0][0];
  var bVal = rowVals[0][1];
  var cVal = rowVals[0][2];
  var gVal = rowVals[0][6];

  return ((gVal * fVal) + aVal + bVal + cVal);
}

然而,为了加快速度(以及其他一些原因,这些原因在这里尝试解释会很复杂,所以你只需要相信我),我想让自定义函数设置值细胞是一个公式,而不是自己计算。首先将公式放在单元格中是不行的,因为即使列F不包含数字,它仍会计算/显示结果。 这是我到目前为止所尝试的内容:

function myFunction2() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var rowNum = sheet.getActiveCell().getRow();
  var fVal = sheet.getRange(rowNum, 6).getValue();

  if (fVal == "" || isNaN(fVal)) {
    return "";    //leave cell blank if column F doesn't contain a number
  }

  var formula = '=SUM((G2*F2)+A2+B2+C2)';

  return formula;
}

^这只是让单元格显示字符串“= SUM((G2 * F2)+ A2 + B2 + C2)”。

所以我尝试在活动单元格上使用setFormula:

function myFunction3() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var cell = sheet.getActiveCell();
  var rowNum = cell.getRow();
  var fVal = sheet.getRange(rowNum, 6).getValue();

  if (fVal == "" || isNaN(fVal)) {
    return "";    //leave cell blank if column F doesn't contain a number
  }

  cell.setFormula('=SUM((G2*F2)+A2+B2+C2)');
}

^当我在一个单元格中调用该函数时,返回了一条错误,上面写着“你没有权限调用setFormula”。当我尝试获取活动单元格的a1表示法然后使用getRange(a1Notation).setFormula('= SUM((G2 * F2)+ A2 + B2 + C2)')而不是直接调用setFormula时,同样的事情发生了活跃细胞。

有人知道是否有解决该权限错误的方法?或者对如何实现这个有任何其他想法?

1 个答案:

答案 0 :(得分:0)

我实际上最终找到了使用内置IF function来实现我想要的方法,这就是我所做的。