简体   繁体   English

如何使用数组进行优化?

[英]How can I optimize with an array?

I'm starting to learn about google app script with JavaScript.我开始学习使用 JavaScript 的 google 应用程序脚本。 I wrote this code, but it is really slow and executing the function takes too long.我写了这段代码,但它真的很慢,而且执行函数需要很长时间。 I think this isn't the best way to do the function.我认为这不是执行该功能的最佳方式。 Is there any option/way (array), to make it faster or in other way to reduce to the time waiting?是否有任何选项/方式(数组),使其更快或以其他方式减少等待时间? All I wish to do is to insert "today's date", when a column cell value is set true, in another cell column.我想要做的就是在另一个单元格列中插入“今天的日期”,当列单元格值设置为 true 时。

function onEdit() {
  sConfDate();
}

function sConfDate(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var dataSheet = ss.getSheetByName("Data");
  var dataRange = dataSheet.getRange(9, 1, dataSheet.getLastRow(), 43);
  var data = dataRange.getValues();
  var d = new Date();
  var dd = d.getDate();
  var mm = d.getMonth() +1;
  var yyyy = d.getFullYear();
  var date = dd + "/" + mm + "/" + yyyy;
  var needSay = 'SUC';
  var needSay2 = '-';

  for(var i = 0; i < data.length; i++){
    //row items
    var values = data[i];
    //column items
  for(var j = 0; j < values.length; j++){
    var row = values[j];
    var checkRow = row;
    //Logger.log(checkRow);
       if(checkRow === needSay && checkRow === needSay2){
         dataSheet.getRange(9 + i, 43).setValue(date);
      };
    };
  };
}

Perhaps this is what you had in mind:也许这就是你的想法:

function sConfDate(){
  var ss=SpreadsheetApp.getActive();
  var dataSheet=ss.getSheetByName("Data");
  var dataRange=dataSheet.getRange(9, 1, dataSheet.getLastRow()-8, 43);
  var data=dataRange.getValues();
  var datacol43=dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).getValues();
  var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
  data.forEach(function(r,i){
    r.forEach(function(c,j){
      if(c=='SUC' || c=='-') {
        datacol43[i][0]=date;
      }
    });
  });
  dataSheet.getRange(9,43,dataSheet.getLastRow()-8,1).setValues(datacol43);                   
}

This might actually run faster:这实际上可能运行得更快:

function sConfDate(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Data");
  var rg=sh.getRange(9, 1, sh.getLastRow()-8, 43);
  var data=rg.getValues();
  var crg=sh.getRange(9,43,sh.getLastRow()-8,1);
  var cdata=crg.getValues();
  var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
  for(var i=0;i<data.length;i++) {
    for(var j=0;j<data[i].length;j++) {
      if(data[i][j]=='SUC' || data[i][j]=='-') {
        cdata[i][0]=date;
        break;
      }
    }
  }
  crg.setValues(cdata);                   
}

Perhaps this would be better.或许这样会更好。

function sConfDate2(){
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName("Data");
  var rg=sh.getRange(9, 1, sh.getLastRow()-8, 8);
  var data=rg.getValues();
  var crg=sh.getRange(9,8,sh.getLastRow()-8,1);
  var cdata=crg.getValues();
  var date=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yyyy");
  for(var i=0;i<data.length;i++) {
    var row=data[i];//Im guessing this is probably what you want unless you have particular columns in mind
    if(row.indexOf('SUC')!=-1 && row.indexOf('-')!=-1) {
      cdata[i][0]=date;
    }
  }
  crg.setValues(cdata);                   
}

Spreasheet picture 电子表格图片

The frist column ("SUC CONFIRMADA") is an state that changes every day itself. 第一列(“ SUC CONFIRMADA”)是一种状态,每天都会发生变化。 The second column is the next one form the first one in the picture. 第二列是图片中第一列的下一个列。 All I want to do is get those values from this columns in array. 我要做的就是从数组中的这些列中获取这些值。 Then make an statement like this : If (the first cell = "SUC CONFIRMADA" and second cell = "-") = insert today's date. 然后进行如下声明:如果(第一个单元格=“ SUC CONFIRMADA”,第二个单元格=“-”)=插入今天的日期。 This is why I need two statments, because i have inserted a dates in the second column and i won't delete them. 这就是为什么我需要两个陈述,因为我在第二栏中插入了一个日期,并且我不会删除它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM