Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 细化数据';获取/匹配';在谷歌脚本中_Javascript_Performance_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 细化数据';获取/匹配';在谷歌脚本中

Javascript 细化数据';获取/匹配';在谷歌脚本中,javascript,performance,google-apps-script,google-sheets,Javascript,Performance,Google Apps Script,Google Sheets,我有一些代码工作得很好,只是相当缓慢和笨拙。我相信有更好的方法可以做到这一点: 我有两张表,一张由用户编辑(“MAIN”),另一张由脚本从中提取数据(超过5000行数据)(“REF”)。基本上,它会检查第1列是否匹配,如果匹配用户输入的内容,则会从第3列以外的同一行获取值 代码起作用,但速度相当缓慢: function onEdit(){ var s = SpreadsheetApp.getActive().getSheetByName('MAIN'); var sref = Sprea

我有一些代码工作得很好,只是相当缓慢和笨拙。我相信有更好的方法可以做到这一点:

我有两张表,一张由用户编辑(“MAIN”),另一张由脚本从中提取数据(超过5000行数据)(“REF”)。基本上,它会检查第1列是否匹配,如果匹配用户输入的内容,则会从第3列以外的同一行获取值

代码起作用,但速度相当缓慢:

function onEdit(){
  var s = SpreadsheetApp.getActive().getSheetByName('MAIN');
  var sref = SpreadsheetApp.getActive().getSheetByName('REF');

  var activeRow = s.getActiveCell().getRow();
  var activeCol = s.getActiveCell().getColumn();
  var activeCell = s.getActiveCell().getValue();

  var mainPageBranch = s.getRange(8,1).getValue();
  var refPageBranch = sref.getRange('I4').getValue();

  var lastrow = sref.getLastRow();

  if(activeCol == '2' || activeCol == '5' || activeCol == '8' || activeCol == '11' || activeCol == '14' || activeCol == '17' || activeCol == '20'){
    if(activeRow > 9 && activeRow < 41){
      if(activeCell > 100000){
        s.getRange(activeRow, activeCol+1).setValue(1);
      }
      else{
        s.getRange(activeRow, activeCol+1).setValue('');
      }
      for(var i=5; i <lastrow; i++){
        var productCode = sref.getRange(i, 1).getValue();
        if(activeCell == productCode){
          var essMould = sref.getRange(i,3).getValue();
          s.getRange(activeRow+1,activeCol).setValue(essMould);
          s.getRange(activeRow+1,activeCol+1).setValue('1');
          break;
        }
      }
      Logger.log('Product Code: ' + productCode);
      Logger.log('Ess Mould: ' + essMould);
      Logger.log('Last Row: ' + lastrow);
    }
  }
}
函数onEdit(){
var s=SpreadsheetApp.getActive().getSheetByName('MAIN');
var sref=SpreadsheetApp.getActive().getSheetByName('REF');
var activeRow=s.getActiveCell().getRow();
var activeCol=s.getActiveCell().getColumn();
var activeCell=s.getActiveCell().getValue();
var mainPageBranch=s.getRange(8,1).getValue();
var refPageBranch=sref.getRange('I4').getValue();
var lastrow=sref.getLastRow();
如果(activeCol='2'| | activeCol='5'| | activeCol='8'| | activeCol='11'| | activeCol='14'| | activeCol='17'| activeCol='20'){
如果(activeRow>9&&activeRow<41){
如果(activeCell>100000){
s、 getRange(activeRow,activeCol+1).setValue(1);
}
否则{
s、 getRange(activeRow,activeCol+1).setValue(“”);
}

对于(var i=5;i您不应该在每个循环上获得单独的值:

for(var i=5; i <lastrow; i++){
  var productCode = sref.getRange(i, 1).getValue();

for(var i=5;我有一个更精致的想法,这是我一直在寻找的,但我自己也没能做到哈哈!我已经编辑了你的代码,稍微适合我的应用程序-你可以在我的帖子中看到它被编辑过:)谢谢!
for(var i=5; i <lastrow; i++){
  var productCode = sref.getRange(i, 1).getValue();
var data,essMould,i,L,productCode;

data = sref.getRange(5, 1, lastrow-5,activeCol).getValues();
L = data.length; //Length of data

for(i=0; i < L; i++){
  productCode = data[i][0];
  Logger.log("productCode: " + productCode);

  if (activeCell == productCode) {
    essMould = data[i][activeCol];
    data[i][2] = essMould;
    data[i + 1][activeCol + 1] = 1;
    break;
  }
}

sref.getRange(5,1,data.length,data[0].length).setValues(data);