Удаление нескольких листов в нескольких таблицах - PullRequest
0 голосов
/ 19 марта 2020

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

2. Мой код lastRow дает пустой в конце и когда я делаю lastRow-1, он не показывает мою последнюю строку. Мой код, хотя и продолжается через это, содержит ошибки в пустой строке. Поскольку список время от времени обновляется с помощью другого сценария, я не могу установить здесь фиксированный диапазон.

Этот код получил ошибку во время выполнения после выполнения в течение получаса.

function myFunction() {
  var dbsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ID Database");
  var IDList = dbsheet.getRange("B2:B").getValues(); 
  var lastRow = dbsheet.getLastRow();
//Looping through all the file ID's in the ID Database tab
  for (var i=0; i < lastRow; i++) {
  var destinationID = (IDList[i][0]);
//Locating the file
  var ss = SpreadsheetApp.openById(destinationID); 
//Below the steps that will be executed
  var sheets = ss.getSheets();

  for (i = 0; i < sheets.length; i++) {
     switch(sheets[i].getSheetName()) {
     case "Asset List":
     case "History":
     case "Floorplans":
         break;
     default:
        ss.deleteSheet(sheets[i]);
      }
    }
  }
}

Я очень новичок в java и сценариях, и я просто проб и ошибок с фрагментами кода, которые пытаются выучить.

1 Ответ

0 голосов
/ 19 марта 2020

Поскольку диапазон для повторения начинается во 2-й строке, а не в 1-й, вам необходимо вычесть 1 в переменную lastRow, чтобы соответствовать длине массива IDList. Основная проблема в том, что вы используете одну и ту же переменную i для обоих циклов, вам нужно использовать разные переменные счетчика для каждого, например j для внутреннего l oop:

function myFunction() {
  var dbsheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ID Database");
  var IDList = dbsheet.getRange("B2:B").getValues(); 
  var lastRow = dbsheet.getLastRow();

  //Looping through all the file ID's in the ID Database tab
  for (var i=0; i < lastRow - 1; i++) {
    var destinationID = (IDList[i][0]);
    //Locating the file
    var ss = SpreadsheetApp.openById(destinationID); 
    //Below the steps that will be executed
    var sheets = ss.getSheets();

    for (var j = 0; j < sheets.length; j++) {
      switch(sheets[j].getSheetName()) {
        case "Asset List":
        case "History":
        case "Floorplans":
          break;
        default:
          ss.deleteSheet(sheets[j]);
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...