Есть ли способ быть более эффективным при получении значений из таблицы, если они содержат определенное значение? - PullRequest
1 голос
/ 09 января 2020

Я новичок в этом, и я пытаюсь скопировать и вставить определенные строки (каждая строка, содержащая значение "Buenos días" в столбце C) из электронной таблицы 1 (CSV) в электронную таблицу 2 (buenosDias) , Для полного запуска скрипта требуется слишком много времени, и я не могу найти способ быть более эффективным. Есть ли способ быть более эффективным? Вот код, который я придумал:

function buenosDias() {
     var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1ur1Y7KoPONxPiFBMdGR4UfJW4GfyLy4MDxTEk30mg8w/edit#gid=0"); var sheets = ss.getSheets();
     var buenosDias = ss.getSheetByName("Buenos días");   var range = buenosDias.getDataRange().getValues();   var CSV = ss.getSheetByName("CSV");
     var lastRowA = CSV.getLastRow();   var CSVA = CSV.getRange(1, 1, lastRowA).getValues();

  var lastRowB = CSV.getLastRow();   var CSVB = CSV.getRange(1, 2, lastRowB).getValues();
     var lastRowC = CSV.getLastRow();   var CSVC = CSV.getRange(1, 3, lastRowC).getValues();

  var lastRowD = CSV.getLastRow();   var CSVD = CSV.getRange(1, 4, lastRowD).getValues();
     var lastRowE = CSV.getLastRow();   var CSVE = CSV.getRange(1, 5, lastRowE).getValues();

  var lastRowF = CSV.getLastRow();   var CSVF = CSV.getRange(1, 6, lastRowF).getValues();
     var lastRowG = CSV.getLastRow();   var CSVG = CSV.getRange(1, 7, lastRowG).getValues();

  var lastRowH = CSV.getLastRow();   var CSVH = CSV.getRange(1, 8, lastRowH).getValues();
     var lastRowI = CSV.getLastRow();   var CSVI = CSV.getRange(1, 9, lastRowI).getValues();

  var lastRowJ = CSV.getLastRow();   var CSVJ = CSV.getRange(1, 10, lastRowJ).getValues();
     var lastRowK = CSV.getLastRow();   var CSVK = CSV.getRange(1, 11, lastRowK).getValues();

  var lastRowL = CSV.getLastRow();   var CSVL = CSV.getRange(1, 12, lastRowL).getValues();
     var lastRowM = CSV.getLastRow();   var CSVM = CSV.getRange(1, 13, lastRowM).getValues();

     for (var i = 1;i < CSVA.length; i++) {

    var lastRow0 = buenosDias.getLastRow();
    var RowToComplete = lastRow0;

    if (CSVC[i] == "Buenos días") {

      buenosDias.getRange(RowToComplete+1, 1).setValue(CSVA[i]).setHorizontalAlignment("center");
      buenosDias.getRange(RowToComplete+1, 2).setValue(CSVF[i]).setNumberFormat("0").setHorizontalAlignment("center");
      buenosDias.getRange(RowToComplete+1, 3).setValue(CSVH[i]).setNumberFormat("0").setHorizontalAlignment("center");
      buenosDias.getRange(RowToComplete+1, 4).setValue(CSVH[i]/CSVF[i]).setNumberFormat("00.00%").setHorizontalAlignment("center");
      buenosDias.getRange(RowToComplete+1, 5).setValue(CSVJ[i]).setNumberFormat("0").setHorizontalAlignment("center");
      buenosDias.getRange(RowToComplete+1, 6).setValue(CSVJ[i]/CSVF[i]).setNumberFormat("00.00%").setHorizontalAlignment("center");

    }
       } }

Спасибо!

1 Ответ

0 голосов
/ 09 января 2020

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

Также, Я сделал один for l oop, чтобы перебрать столбец C в поисках строки "Buenos dias". Если это совпадает, то добавляет эту строку в лист CSV. Не забудьте изменить numberofColumns на фактическое количество столбцов, которые вы хотите скопировать из каждой строки из столбца А.

Из setHorizontalAlignment l oop, который вы сделали в конце, я думаю, вы хочу центрировать все данные листа CSV. Проще установить его для всего диапазона данных , а не зацикливать все строки.

function buenosDias() {
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1ur1Y7KoPONxPiFBMdGR4UfJW4GfyLy4MDxTEk30mg8w/edit#gid=0"); 
  var buenosDias = ss.getSheetByName("Buenos días");   
  var CSV = ss.getSheetByName("CSV");

  var range = CSV.getRange("C1:C").getValues(); //Range goes from C1 to the last C with values   

  for (var i = 0; i < range.length; i++){

    if (range[i][0] == "Buenos días"){

      CSV.appendRow(buenosDias.getRange((i+1), 1, numberofColumns).getValues());

    }

  }
  CSV.getDataRange().setHorizontalAlignment('center');

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