【问题标题】:My App Script is very slow how can I improve this?我的 App Script 很慢,我该如何改进?
【发布时间】:2022-12-09 17:57:57
【问题描述】:

我的脚本有很多获取和设置值。我知道它会使脚本变慢。 我想改进我的代码,但我不确定该怎么做。 我用它来搜索另一张纸上的信息。 有时需要 2-3 分钟。

var wsformBN = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("formBN");
var wsCustomer = SpreadsheetApp.openById("SheetID").getSheetByName("SheetName");

//////////////

function clearCustomerInfo(){

wsformBN.getRange("C7:E8").clearContent();
wsformBN.getRange("C9:D12").clearContent();
wsformBN.getRange("H7:I11").clearContent();
wsformBN.getRange("H13:I15").clearContent();

}

//////////////

function searchCUtoBN(){
var values = wsCustomer.getDataRange().getDisplayValues();
var valuesFound=false;

for(var i=0 ; i<values.length; i++){
  var rowValue = values[i];
  var searchCustomerID = wsformBN.getRange("C4").getDisplayValue();

  clearCustomerInfo()

  if(rowValue[2] === searchCustomerID){    

    wsformBN.getRange("C7:E7").setValue(rowValue[3]);
    wsformBN.getRange("C8:E8").setValue(rowValue[4]);
    wsformBN.getRange("C9:E9").setValue(rowValue[5]);
    wsformBN.getRange("C10:E10").setValue(rowValue[6]);
    wsformBN.getRange("C11:E11").setValue(rowValue[7]);
    wsformBN.getRange("C12:E12").setValue(rowValue[8]);

    wsformBN.getRange("H7:I7").setValue(rowValue[11]);
    wsformBN.getRange("H8:I8").setValue(rowValue[12]);
    wsformBN.getRange("H9:I9").setValue(rowValue[13]);
    wsformBN.getRange("H10:I10").setValue(rowValue[14]);
    wsformBN.getRange("H11:I11").setValue(rowValue[15]);

    wsformBN.getRange("H13:I13").setValue(rowValue[17]);
    wsformBN.getRange("H14:I14").setValue(rowValue[18]);
    wsformBN.getRange("H15:I15").setValue(rowValue[19]);

    valuesFound=true;
    return;
  }}

   if (valuesFound==false){
clearCustomerInfo()
}};


如果您知道如何编写此改进,请提供帮助。 我真的想要这个。

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    您的代码不是最优的,但如果运行它真的需要两到三分钟,那么很可能是电子表格偏重。要提高电子表格性能,请参阅these optimization tips

    要改进代码,请使用 Range.setValues(),如下所示:

    const wsformBN = SpreadsheetApp.getActive().getSheetByName('formBN');
    const wsCustomer = SpreadsheetApp.openById('SheetID').getSheetByName('SheetName');
    
    function clearCustomerInfo() {
      wsformBN.getRangeList(['C7:E8', 'C9:D12', 'H7:I11', 'H13:I15',]).clearContent();
    }
    
    function searchCUtoBN() {
      clearCustomerInfo();
      const offset_ = (rangeA1, values) =>
        wsformBN.getRange(rangeA1).offset(0, 0, values.length, values[0].length);
      const searchCustomerID = wsformBN.getRange('C4').getDisplayValue();
      const values = wsCustomer.getDataRange().getDisplayValues();
      values.some(row => {
        if (row[2] === searchCustomerID) {
          const valuesC7e12 = row.slice(3, 8 + 1).map(value => [value, value, value]);
          offset_('C7', valuesC7e12).setValues(valuesC7e12);
          const valuesH7i11 = row.slice(11, 15 + 1).map(value => [value, value]);
          offset_('H7', valuesH7i11).setValues(valuesH7i11);
          const valuesH13i15 = row.slice(17, 19 + 1).map(value => [value, value]);
          offset_('H13', valuesH13i15).setValues(valuesH13i15);
          return true;
        }
      });
    }
    

    请参阅Apps Script at Stack OverflowClean Code JavaScript

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 2011-11-08
      • 1970-01-01
      • 2018-03-03
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-31
      • 2020-08-07
      相关资源
      最近更新 更多