【问题标题】:How To Loop Google Sheet Formula In App Script如何在 App 脚本中循环使用 Google Sheet 公式
【发布时间】:2020-11-17 16:02:08
【问题描述】:

我正在尝试通过 Google App Script 在 Google Sheet 中设置公式。

这是电子表格的插图:

我也尝试编写代码,但我不知道如何循环它,因此对于添加到单元格范围“A3:F”的每个值,都会自动将其与总计列(G 列)相加。你能告诉我如何循环吗?您的回复将不胜感激:)

function onEdit(e){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Sheet1');

  var cell = s.getRange("G3");
  cell.setFormula("=SUM((A3/100)*D3)+((B3/100)*E3)+((C3/100)*F3)");
}

编辑

这是适用于我的更新代码:

function onEdit(e){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Sheet1');

  const cell = s.getRange(3, 7, s.getLastRow());
  cell.setFormula("=SUM((A3/100)*D3)+((B3/100)*E3)+((C3/100)*F3)");
  
}

【问题讨论】:

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


【解决方案1】:

您可以为您的公式创建一个“模板”,并在循环中将必要的参数替换为行号。这是一个将公式从第 3 行设置到第 12 行的示例

var ss              = SpreadsheetApp.getActiveSpreadsheet();
var s               = ss.getSheetByName( 'Sheet1' );
var firstRowNum     = 3;
var lastRowNum      = 12;
var formulas        = [];
var formulaTemplate = '=SUM((A{rowNum}/100)*D{rowNum})+((B{rowNum}/100)*E{rowNum})+((C{rowNum}/100)*F{rowNum})';

for ( var i = firstRowNum; i <= lastRowNum; i++ ) {
    formulas.push( [ formulaTemplate.replace( /{rowNum}/g, i ) ] );
}

s.getRange( 'G' + firstRowNum + ':G' + lastRowNum ).setFormulas( formulas );

【讨论】:

    【解决方案2】:

    不需要循环。 SetFormula 会自动调整到一个新的范围,就像自动填充一样:

      const cell = s.getRange(`G3:G${s.getLastRow()}`);
      cell.setFormula("=SUM((A3/100)*D3)+((B3/100)*E3)+((C3/100)*F3)");
    

    【讨论】:

    • 这段代码看起来很简单。但我无法应用它,出现错误“Exception: Range not found (line 6, file "sheet")”。第 6 行是 getLastRow 代码所在的位置。你知道是什么问题吗?
    • @Ray v8 启用了吗?
    • Yupp Chrome V8 已启用
    • 我的问题是我的 onEdit 函数的完整代码。我试过'const cell = s.getRange(3, 7, s.getLastRow());'但它在 Total 列的空白行的其余部分显示 0
    • @ray 我试过'const cell = s.getRange(3, 7, s.getLastRow());'但它在 Total 列的空白行的其余部分显示 0 G 列中是否有公式?
    【解决方案3】:

    您可以使用“简单”函数而不是脚本来做到这一点。

    SUMPRODUCT 很好,但不会循环。您可以使用 ARRAYFORMULA,但您需要列出每个乘法,例如 A/100*D。

    要使用 ARRAYFORMULA 向下循环,每个列范围的格式应为 A3:A 等。

    因此,您在单元格 G3 中的公式将是:

    =ARRAYFORMULA((A3:A/100*D3:D)+(B3:B/100*E3:E)+(C3:C/100*F3:F))

    注意:行号必须与您插入主 ARRAYFORMULA 的位置相同(即示例中的 3)。如果你弄错了,你的工作表会在不知不觉中生成大量行!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-02
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 2018-12-24
      相关资源
      最近更新 更多