首页 > 解决方案 > 将公式设置为多个单元格脚本 - 必须有更有效的方法

问题描述

在 Google 表格中,我想将以下公式应用于 A2、A14、A26 和 A28,并将另一个公式应用于 B2、B14、B26 和 B28。现在我只做以下4次。它有效,但它并不漂亮。我怎样才能更有效地做到这一点?

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  sheets[7].setName('.NCF');
  
  var sheet = ss.getSheets()[5];
  var cell1a = sheet.getRange("A2");
    cell1a.setFormula("=iferror(IF(QUERY('.NCF'!A2, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
  var cell1b = sheet.getRange("A14");
    cell1a.setFormula("=iferror(IF(QUERY('.NCF'!A14, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
  var cell1c = sheet.getRange("A26");
    cell1c.setFormula("=iferror(IF(QUERY('.NCF'!A26, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
  var cell1d = sheet.getRange("A38");
    cell1d.setFormula("=iferror(IF(QUERY('.NCF'!A38, \"where A contains '1ST'\")<>\"\", 1, ),\"\")");
    
  var cell2a = sheet.getRange("B2");
    cell2a.setFormula("=iferror(if(A2=1,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
  var cell2b = sheet.getRange("B14");
    cell2a.setFormula("=iferror(if(A14=2,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
  var cell2c = sheet.getRange("B26");
    cell2a.setFormula("=iferror(if(A26=3,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
  var cell2d = sheet.getRange("B38");
    cell2a.setFormula("=iferror(if(A38=4,query('.NCF'!A:A,\"Select A where A contains '( G54.1P'\"),\"\"),\"\")");
}

标签: google-apps-scriptgoogle-sheetsgoogle-sheets-formula

解决方案


function onEdit(e) {
  const ss = e.source;
  const sheets = ss.getSheets();
  sheets[7].setName('.NCF');
  const sheet = sheets[5];

  let a1;
  ['A', 'B'].forEach(column =>
    [2, 14, 26, 38].forEach((row, i) =>
      sheet
        .getRange((a1 = column + row))
        .setFormula(
          column === 'A'
            ? `=IFERROR(IF(QUERY('.NCF'!${a1}, "WHERE A CONTAINS '1ST'")<>"",1,))`
            : `=IFERROR(IF(A${row}=${i +
                1},QUERY('.NCF'!A:A,"SELECT A WHERE A CONTAINS '( G54.1P'"),))`
        )
    )
  );
}

另请参阅三元运算符


推荐阅读