Как установить данные из массива в другой массив для повышения производительности - PullRequest
0 голосов
/ 17 апреля 2019

В настоящее время я разрабатываю лист, который показывает результаты из набора данных, основанных на некоторых фильтрах, но данные загружаются медленно при получении результатов. Я безуспешно пытался следовать рекомендациям 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 голосов
/ 17 апреля 2019

Я просто хотел обновить эту тему, потому что сам разобрался, см. Прикрепленный новый код с использованием новых двумерных массивов

    ...
    //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);   
  }

Теперь вместо записи по строке за раз, я просто пишувесь массив одновременно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...