![](/img/trans.png)
[英]Google sheet app script - Copy data from one sheet to another based on condition with loop
[英]Slow Execution for Copying Data from One Sheet to Another Using Google App Script
我想请您帮助加快此脚本的速度。 我从堆栈溢出的答案中得到了脚本。 它花费的时间比它应该的要长(30-50 秒),尽管以前没有。
function FormExec() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sinput = ss.getSheetByName("Slip");
var rng1 = sinput.getRange("B3").getValue();
var rng2 = sinput.getRange("D3").getValue();
var rng3 = sinput.getRange("B5").getValue();
var rng4 = sinput.getRange("D5").getValue();
var rng5 = sinput.getRange("B7").getValue();
var rng6 = sinput.getRange("D7").getValue();
var rng7 = sinput.getRange("J1").getValue();
if(rng1 == 0 || rng2 == 0 || rng3 == 0 || rng4 == 0 || rng5 == 0 || rng6 == 0) {
Browser.msgBox('Please fill all required fields.');
} else {
var soutput = ss.getSheetByName("Form Responses 5");
var input = sinput.getRange(1, 10, 15).getValues();
var flatin = [].concat.apply([], input);
soutput.getRange(soutput.getLastRow()+1, 1,1,15).setValues([flatin]);
soutput.insertRowAfter(soutput.getLastRow());
resetSlip();
};
}
function resetSlip() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sinput = ss.getSheetByName("Slip");
sinput.getRange("B3").clearContent();
sinput.getRange("B11:H11").clearContent();
sinput.getRange("B19").clearContent();
sinput.getRange("D3").clearContent();
sinput.getRange("B21:E21").clearContent();
sinput.getRange("B5").clearContent();
sinput.getRange("B15:E15").clearContent();
sinput.getRange("B13:I13").clearContent();
sinput.getRange("D5").clearContent();
sinput.getRange("B9:I9").clearContent();
sinput.getRange("B7").clearContent();
sinput.getRange("D7").clearContent();
sinput.getRange("B17:C17").clearContent();
sinput.getRange("B5").setFormula("=K1");
sinput.getRange("D3").setValue("=L1");
sinput.getRange("B7").setValue("=M1");
}
这可能是你得到的最好的结果。 就个人而言,我不会乱用表单响应页面。 我建议使用 onFormSubmit 触发器并构建您自己的页面。
function FormExec() {
var ss = SpreadsheetApp.getActive();
var sh=ss.getSheetByName("Slip");
var ui=SpreadsheetApp.getUi();
var rng1 = sh.getRange("B3").getValue();
var rng2 = sh.getRange("D3").getValue();
var rng3 = sh.getRange("B5").getValue();
var rng4 = sh.getRange("D5").getValue();
var rng5 = sh.getRange("B7").getValue();
var rng6 = sh.getRange("D7").getValue();
var rng7 = sh.getRange("J1").getValue();
if(rng1==0||rng2==0||rng3==0||rng4==0||rng5==0||rng6==0) {
ui.alert('Please fill all required fields.');
}else{
var soutput=ss.getSheetByName("Form Responses 5");
var input=sh.getRange(1,10,15,1).getValues();
var flatin = input.map(function(r){return r[0];});
soutput.getRange(soutput.getLastRow()+1, 1,1,flatin.length).setValues([flatin]);
soutput.insertRowAfter(soutput.getLastRow());
sh.getRange("B3").clearContent();
sh.getRange("B11:H11").clearContent();
sh.getRange("B19").clearContent();
sh.getRange("D3").clearContent();
sh.getRange("B21:E21").clearContent();
sh.getRange("B5").clearContent();
sh.getRange("B15:E15").clearContent();
sh.getRange("B13:I13").clearContent();
sh.getRange("D5").clearContent();
sh.getRange("B9:I9").clearContent();
sh.getRange("B7").clearContent();
sh.getRange("D7").clearContent();
sh.getRange("B17:C17").clearContent();
sh.getRange("B5").setFormula("=K1");
sh.getRange("D3").setFormula("=L1");
sh.getRange("B7").setFormula("=M1");
}
}
影响电子表格的脚本看起来很慢。 我会重新组织我的日期,以便可以在一个数组中一次获取所有数据并一次处理所有数据,然后用最少数量的 setValues() 替换它,然后用一个 SpreadsheetApp.flush() 替换它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.