繁体   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