如何将数据从一个阵列设置到另一个阵列以提高性能

时间:2019-04-17 09:30:33

标签: javascript google-apps-script

我目前正在开发一个工作表,该工作表显示基于某些过滤器的一组数据的结果,但是在获取结果时数据加载速度会很慢,我一直在尝试遵循Google Documentacion的最佳做法,我可以设置一个数组以使数据加载更快吗?

下面的代码注释了我已经尝试过的内容

function realizarBusqueda() {
  var inicio = SpreadsheetApp.getActive().getSheetByName("INICIO");
  var aux_tags = SpreadsheetApp.getActive().getSheetByName("Aux_Tags");
  var data = SpreadsheetApp.getActive().getSheetByName("Data");
  var data_lc = data.getLastColumn();
  var data_lr = data.getLastRow();
  var searchRange = data.getRange(2,1, data_lr, data_lc);
  var inicio_lc = inicio.getLastColumn();
  inicio.getRange("A8:L1000").clearContent();
  inicio.getRange("A8:L1000").clearFormat();
  var countRows = inicio.getMaxRows();
  inicio.deleteRows(20, (20-countRows)*-1);
  if (inicio.getRange("B4").isBlank()) {
    inicio.getRange("A8:L1000").clearContent();
    inicio.getRange("A8:L1000").clearFormat();
    var countRows = inicio.getMaxRows();
    inicio.deleteRows(20, (20-countRows)*-1);
    SpreadsheetApp.flush();
  }
  else if ((inicio.getRange("B4").getValue() != "" && 
           inicio.getRange("C4").getValue() === "")) {
    //filtrado 1
    var arrayDatos = searchRange.getValues();
    var inicio_fr = 8;
    //var row = new Array(11);
    for (var j = 2; j <= data_lr; j++) {
      //row[j] = new Array(data_lr);
      if (aux_tags.getRange("P2").getValue() === arrayDatos[j-2][4]) {
        var inicio_fc = 1;
        for (var i = 0; i < arrayDatos[j-2].length; i++) {
          //row[j][i] = arrayDatos[j-2][i];
          var row = arrayDatos[j-2][i];
          inicio.getRange(inicio_fr, inicio_fc).setValue(row);
          inicio_fc++;
        }
        inicio_fr++;
      }
      //inicio.getRange("A8").setValues(row);
    }
  }

我希望输出的加载速度更快,目前我已经尝试过,但现在的代码已被注释,但速度太慢

1 个答案:

答案 0 :(得分:0)

我只是想更新这个主题,因为我弄清楚了自己,请参阅使用新的2D数组附加新代码

    ...
    //filtrado 1
    var arrayDatos = searchRange.getValues();
    var inicio_fr = 8;
    var rows = [];
    var row = [];
    for (var j = 2; j <= data_lr; j++) {
      if (aux_tags.getRange("P2").getValue() === arrayDatos[j-2][4]) {
        var inicio_fc = 1;
        for (var i = 0; i < arrayDatos[j-2].length; i++) {
          row.push(arrayDatos[j-2][i]);
          if (i == 11) {
            rows.push(row);
            row = [];
          }
        }        
      }
    }
    inicio.getRange(8, 1, rows.length, rows[0].length).setValues(rows);   
  }

现在,我不再一次写一行,而是一次写了整个数组