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