簡體   English   中英

使用 Google App 腳本將數據從一張工作表復制到另一張工作表時執行緩慢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM