首页 > 解决方案 > 如何优化谷歌电子表格函数的执行时间?

问题描述

function findAgentRow(){
  let row = 2;
  let emailCell;
  let maxRow = sheet.getLastRow();
  while(--maxRow){
    emailCell = sheet.getRange(row, findColumn(sheet, "Agent"));
    if(emailCell.getValue() == agentEmail){
      return row
    }else if(row == sheet.getLastRow()){
       return 0;
    }else{  
        row = row + 1;
    }
  }
}

我编写了一个 google 电子表格函数,它可以定位包含某人信息的行。它检查该行是否包含此人的电子邮件。问题是当电子表格包含超过 700 行时,执行时间超过 2 分钟。

有没有办法优化它?

标签: javascriptloopsgoogle-apps-scriptgoogle-sheetsoptimization

解决方案


尽量不要findColumn在每个循环中使用。

您还应该以只使用一个为目标getValues

function findAgentRow(agentEmail) {
  // const sheet = SpreadsheetApp.getActiveSheet();
  const row = 2;
  const col = findColumn(sheet, 'Agent');
  const values = sheet.getRange(row, col, sheet.getLastRow() - 1, 1).getValues().flat();
  return values.indexOf(agentEmail) + row;
}

function findColumn(sheet, value) {
  const row = 1;
  const values = sheet.getRange(row, 1, 1, sheet.getLastColumn()).getValues()[0];
  return values.indexOf(value) + 1;
}

推荐阅读