Сравните строки из двух массивов измерений и заменив их пустыми строками - Google Scripts - PullRequest
0 голосов
/ 25 мая 2019

Array nowSaved содержит диапазон с данными, сохраненными на моем листе. Данные массива содержат строки, которые я хочу удалить с листа.

Я сравниваю строки массива, но скрипт продолжает работать, не возвращая вывод.

Кроме того, вместо удаления строк из текущего файла, я пытаюсь заменить их пустыми строками. Я сделал это, потому что боюсь, что удаление строк изменит размер массива и заставит его пропускать информацию.

Например, если текущая сохраненная [3] удалена, текущая сохраненная [4] становится новой текущей сохраненной [3]. Поскольку цикл уже прошел через i = 3, то, что раньше делало [4], будет игнорироваться.

Вот то, что у меня сейчас есть:

  
  var emptyRow = []; //an empty row to replace deleted data
  
for (i=0; i<currentlySaved.length;i++) {
  for (j=0; j<data.length;i++) {
    if ( currentlySaved[i] == data[j]) {
      
      
     currentlySaved[i] =emptyRow;
  
  
    }
  }
}

Спасибо, ребята!

Редактировать: добавлены снимки экрана отчета и сохранены БД. Я сожалею, что они вырезаны, данные на листах являются конфиденциальными. Как это должно работать: если драйвер в отчете удален, его строка в saveDB должна быть удалена.

Пример:

В отчете будет отображаться эта информация, полученная из saveDB

флажок терминала имя водителя с номером ЛОЖЬ Нью-Йорк 1234 Джон

пользователь помечает флажок как истинный и нажимает кнопку удаления в верхней части страницы.

Затем сценарий должен найти в сохраненной БД строку, которая точно соответствует этой информации, и либо удалить ее, либо изменить ее значения на "".

отчет

savedDB

Ответы [ 2 ]

1 голос
/ 25 мая 2019

Две вещи: во-первых, похоже, что вы итерируете i во втором цикле, а не j.

for (j=0; j<data.length;**i++**) {

Это может быть частью проблемы.

Было бы что-токак то, что я здесь работаю для того, что ты делаешь?

function deleteRows() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet()

  var range = sheet.getRange("A4:A10");
  var data = [1,4,6,8];
  var lastRangeRow = range.getLastRow();
  var firstRangeRow = range.getRow();

  for (var i=lastRangeRow;i > firstRangeRow - 1;i--) {
    for (j=0; j<data.length;j++) {
      if ( i == data[j]) {
        sheet.deleteRow(i);
      }
    }
  }
}
0 голосов
/ 25 мая 2019

Я думаю, это то, что вы пытаетесь достичь:

function replaceRowsWithEmptyRows() {
  var ss=SpreadsheetApp.getActive();
  var sh1=ss.getSheetByName('Sheet1');
  var rg=sh1.getDataRange();
  var dA=rg.getValues();
  var csA=dA[0].slice(0);//csA has a copy of whats in dA[0]
  var mtA=csA.map(function(el){return ''});//mtA has csA.length nulls
  for(var i=0;i<dA.length;i++) {
    if(csA.join('')==dA[i].join('')) {//comparing the contents of the arrays
      dA[i]=mtA;//if they match then replace current row with empties
    }
  }
  var sh2=ss.getSheetByName('Sheet2');
  sh2.clear();
  sh2.getRange(1,1,dA.length,dA[0].length).setValues(dA);//Displayed results in Sheet2
}

Лист1:

enter image description here

Лист2:

enter image description here

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