【发布时间】:2014-02-04 22:45:14
【问题描述】:
感谢从这里收集的信息,以及其他帖子中的直接帮助。像我这样的白痴已经设法形成了类似于脚本的东西:)
它做的正是它应该做的事情,结果正确,完美。快乐的时光。 但不幸的是,它可能需要一段时间才能执行(其缓慢的部分原因是谷歌表格中的缓慢公式,希望用像这样的按需脚本替换公式并放弃最庞大的公式)
在我到达那个阶段之前,我希望有人能看看它,看看是否有任何可以节省的开销/膨胀/处理。
我目前的想法是我不止一次地检查数据,当我可以尝试同时检查所有 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);
}
感谢阅读:)
编辑
就是这样,有建议的编辑和工作。
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);
}
感谢您的反馈,如果有人有的话,我会全力以赴。
【问题讨论】:
标签: javascript google-apps-script google-sheets google-docs