Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.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_Google Apps Script_Google Sheets_Google Docs - Fatal编程技术网

Javascript 脚本执行时间各不相同,可能相当长,有人能提出任何改进建议吗

Javascript 脚本执行时间各不相同,可能相当长,有人能提出任何改进建议吗,javascript,google-apps-script,google-sheets,google-docs,Javascript,Google Apps Script,Google Sheets,Google Docs,感谢从这里收集的信息,以及其他帖子中的直接帮助。像我这样的白痴已经成功地形成了类似于脚本的东西:) 而且它完全做到了它应该做的,结果是正确的,完美的。快乐的日子。 但不幸的是,它可能需要一段时间才能执行(其速度慢的部分原因是谷歌表单中的公式速度慢,希望用像这样的随需应变脚本取代公式,并抛弃最笨重的公式) 在我到达那个阶段之前,我一直希望有人能看一看,看看是否有任何开销/膨胀/处理可以节省 我现在的想法是,我不止一次地检查数据,那时我可以尝试同时检查所有的if 我还向工作表写入了几次,也许将返回值

感谢从这里收集的信息,以及其他帖子中的直接帮助。像我这样的白痴已经成功地形成了类似于脚本的东西:)

而且它完全做到了它应该做的,结果是正确的,完美的。快乐的日子。 但不幸的是,它可能需要一段时间才能执行(其速度慢的部分原因是谷歌表单中的公式速度慢,希望用像这样的随需应变脚本取代公式,并抛弃最笨重的公式)

在我到达那个阶段之前,我一直希望有人能看一看,看看是否有任何开销/膨胀/处理可以节省

我现在的想法是,我不止一次地检查数据,那时我可以尝试同时检查所有的if

我还向工作表写入了几次,也许将返回值放入数组并写入一次会更好

所以我试着去调查,但我对这一切还是很陌生

代码只需根据值和日期对表单响应进行计数,然后将结果输出到报告中

function snapshot() {
  var dateColumn = 2;
  var findColumn = 4;
  var toFind = "Yes - Complete (going ahead)";  
  var daysWorth = 31; 
  var target = "Snapshot";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
   var targetSheet = ss.getSheetByName(target);
  var sheet = ss.getSheetByName('Form Responses');
  var values = sheet.getDataRange().getValues();

  var today = new Date();
  var thisMorning = today;
  thisMorning.setHours(0);
  thisMorning.setMinutes(0);



  var completed = 0;
  var attempted = 0;
  var totAtt = 0;
  var totCom = 0;

  for (var i = 0; i < daysWorth; i++){
  var startGap = new Date().setTime(thisMorning.getTime() - i*24*60*60*1000);
  var endGap = new Date().setTime(thisMorning.getTime() - (i-1)*24*60*60*1000);

  for(var counter in values){
   var testDate = new Date(values[counter][dateColumn -1]);
   if (testDate > startGap && testDate < endGap && values[counter][findColumn -1] == toFind)
   {completed++;
   totCom++;}
   if (testDate > startGap && testDate < endGap)
   {attempted++;
   totAtt++}
  }



  var output = new Date(startGap);
 //Logger.log("since "+output+" we had: "+completed+" completed and: "+attempted+" attempted");

 targetSheet.getRange(i+2,1).setValue(output);
 targetSheet.getRange(i+2,2).setValue(attempted);
 targetSheet.getRange(i+2,3).setValue(completed);   
 targetSheet.getRange(i+2,4).setValue(completed/attempted*100);

  var completed = 0;
  var attempted = 0;

}
targetSheet.getRange(1,1).setValue("Date");
targetSheet.getRange(1,2).setValue("Attempted");
targetSheet.getRange(1,3).setValue("Completed");
targetSheet.getRange(1,4).setValue("Success Rate");
targetSheet.getRange(33,1).setValue("Totals");
targetSheet.getRange(33,2).setValue(totAtt);
targetSheet.getRange(33,3).setValue(totCom);
targetSheet.getRange(33,4).setValue(totCom/totAtt*100);


}
函数快照(){
var-dateColumn=2;
var findColumn=4;
var toFind=“是-完成(继续)”;
var daysWorth=31;
var target=“快照”;
var ss=SpreadsheetApp.getActiveSpreadsheet();
var targetSheet=ss.getSheetByName(目标);
var sheet=ss.getSheetByName('表单响应');
var values=sheet.getDataRange().getValues();
var today=新日期();
var thisMorning=今天;
今早。设定时间(0);
今天早上。设定分钟(0);
var完成=0;
var=0;
var-totAtt=0;
var-totCom=0;
对于(变量i=0;istartGap&&testDatestartGap&&testDate
感谢阅读:)

编辑

所以,这里是,与建议的编辑和工作

function snapshot() {
  var dateColumn = 2;
  var findColumn = 4;
  var toFind = "Yes - Complete (going ahead)";  
  var daysWorth = 31; 
  var target = "Snapshot";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var targetSheet = ss.getSheetByName(target);
  var sheet = ss.getSheetByName('Form Responses');
  var values = sheet.getDataRange().getValues();

  var today = new Date();
  var thisMorning = today;
  thisMorning.setHours(0);
  thisMorning.setMinutes(0);
  var archive = [];


  var completed = 0;
  var attempted = 0;
  var totAtt = 0;
  var totCom = 0;

  for (var i = 0; i < daysWorth; i++){
  var startGap = new Date().setTime(thisMorning.getTime() - i*24*60*60*1000);
  var endGap = new Date().setTime(thisMorning.getTime() - (i-1)*24*60*60*1000);

  for(var counter in values){
   var testDate = new Date(values[counter][dateColumn -1]);
   if (testDate > startGap && testDate < endGap && values[counter][findColumn -1] == toFind)
   {completed++;
   totCom++;}
   if (testDate > startGap && testDate < endGap)
   {attempted++;
   totAtt++}

  }



  var output = new Date(startGap);
  if(!completed/attempted)
    {var success = 0;}
    else
   {var success = completed/attempted*100;}


 archive.push( [output, attempted, completed,success] ); 
  var completed = 0;
  var attempted = 0;

}
  var headers =[["Date","Attempted","Completed","Success Rate"]];
  var footers =[["Totals",totAtt,totCom,totCom/totAtt*100]];  
  targetSheet.getRange(1,1,1,4).setValues(headers);
  targetSheet.getRange(2,1).offset(0, 0, archive.length, archive[0].length).setValues(archive);
  targetSheet.getRange(33,1,1,4).setValues(footers);    


}
函数快照(){
var-dateColumn=2;
var findColumn=4;
var toFind=“是-完成(继续)”;
var daysWorth=31;
var target=“快照”;
var ss=SpreadsheetApp.getActiveSpreadsheet();
var targetSheet=ss.getSheetByName(目标);
var sheet=ss.getSheetByName('表单响应');
var values=sheet.getDataRange().getValues();
var today=新日期();
var thisMorning=今天;
今早。设定时间(0);
今天早上。设定分钟(0);
var归档=[];
var完成=0;
var=0;
var-totAtt=0;
var-totCom=0;
对于(变量i=0;istartGap&&testDatestartGap&&testDate
谢谢你的反馈,如果还有人有,我洗耳恭听。

“也许最好将返回的值放入一个数组中,然后写一次。”-是的,我得想办法写一次.setValues()

targetSheet.getRange(i+2,1).setValue(输出); targetSheet.getRange(i+2,2).setValue(尝试); targetSheet.getRange(i+2,3).setValue(已完成)
targetSheet.getRange(i+2,4).setValue(完成/尝试*100)

应该是像

myArray.push([输出,尝试,完成,完成/尝试*100])

然后在圈外

targetSheet.getRange('A1').offset(0,0,myArray.length,myArray[0].length).setValues(myArray)

谢谢:)工作得很有魅力