Google 表格 + Apps 脚本:比 for 循环更快

时间:2020-12-20 08:40:28

标签: google-apps-script google-sheets

嗨,我正在使用此代码循环遍历另一个谷歌工作表,在“B”列中找到 ID 号“idNum”,一旦找到 ID 号,脚本将用新数据替换整行,但它似乎需要在下一个脚本被触发之前很长时间有没有办法让它更快地循环或使下一个脚本更快地触发。 这是我的代码谢谢

  function editRow(){
    
    var mainsheet = ('10_XEaQiR71----- Sheet ID ----uOhi9VVtk5FI')
    var tsheet = SpreadsheetApp.openById(mainsheet).getSheetByName('Data')
    var targetSheet1 = tsheet.getDataRange().getValues()
    var sheet = SpreadsheetApp.getActive();
    var sourceData = sheet.getSheetByName('Data Input').getRange('A2:IB2').getValues()[0];
    var idNum = sheet.getSheetByName('Data Input').getRange ("B2").getValue();
    var copyFrom = sheet.getSheetByName('Data Input').getRange('A2:IB2')
    var data = copyFrom.getValues()
  
    for(var i = 0; i<targetSheet1.length;i++){
      if(targetSheet1[i][1] == idNum){ 
        var row = i=i+1
        tsheet.getRange('A'+row+':IB'+row).setValues(data);
      
         break;
         }
       }
      next script
     }

1 个答案:

答案 0 :(得分:0)

我相信你的目标如下。

  • 您想降低问题中脚本的流程成本。

问题和解决方法:

  • 在您的脚本中,从 getRange("B2")getRange('A2:IB2') 检索值。在这种情况下,我认为您可以从 getRange('A2:IB2') 中检索它们。
  • 当您使用 V8 运行时,for 循环的处理成本与其他循环几乎相同。 Ref 所以在这种情况下,我想建议使用 TextFinder 而不是 for 循环。因为我认为 TextFinder 在内部服务器中运行,因此,搜索过程可能会减少一点。但我不确定你的实际情况。所以我不确定这是否是解决您的问题的正确方向。因此,请测试以下脚本。

当你的脚本被修改后,变成如下。

修改后的脚本:

function editRow() {
  var mainsheet = '10_XEaQiR71----- Sheet ID ----uOhi9VVtk5FI';

  var sheet = SpreadsheetApp.getActive();
  var data = sheet.getSheetByName('Data Input').getRange('A2:IB2').getValues();
  var idNum = data[0][1];

  var tsheet = SpreadsheetApp.openById(mainsheet).getSheetByName('Data');
  var row = tsheet.getRange("B1:B" + tsheet.getLastRow()).createTextFinder(idNum).findNext().getRow();
  tsheet.getRange(row, 1, 1, data[0].length).setValues(data);

  // next script
}

参考: