[英]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.