Как исключить первые 10 листов из исполнения Google App-скрипта? - PullRequest
0 голосов
/ 28 мая 2019

Этот сценарий циклически просматривает имена листов и изменяет имена в соответствии со значением в A1. Как я могу исключить первые 10 имен листов из выполнения вместо предоставления конкретных имен листов, которые нужно исключить?

Извинения, я полный нуб.

function onEdit() {
  var ss = SpreadsheetApp.getActive();
  var allsheets = ss.getSheets();

  // Array holding the names of the sheets to exclude from the execution
  var exclude =["Sheet1","Sheet2","Sheet3","Article","Frontpage","Logos","Sheet4","Sheet5","Sheet6","Sheet10"];

for(var s in allsheets){
var sheet = allsheets[s];
var oldName = sheet.getName();
var newName = sheet.getRange(1,1).getValue();
if (newName.toString().length>0 && newName !== oldName) {
sheet.setName(newName);

// Stop iteration execution if the condition is meet.
if(exclude.indexOf(sheet.getName())==-1) continue;
  }

} // end of loop

} // end of function

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Вместо использования for(var s in allsheets){

пользователь for(var s=10;i<allsheets.length;i++) {

0 голосов
/ 28 мая 2019

Использовать сплайс ()

Так как метод getSheets() возвращает Array из Sheet объектов, вы можете очень просто добиться желаемого с помощью метода splice(), просто сконфигурируйте его для удаления первых N элементов и не заменяйте их :

var arr = [1,2,3,4,5];
arr.splice(0,3); //0-based start and end indexes;
Logger.log(arr); //should log [4,5]

Обратитесь к документации splice() метода для MDN для более подробного объяснения. Короче говоря, этот метод принимает неограниченное количество аргументов:

  1. Обязательно: индекс на основе 0 для начала;
  2. Необязательно: Индекс на основе 0 заканчивается до конца (если не указан или больше, чем длина Array, в котором вызывается метод, удаляет каждый элемент, начиная с индекса начала);
  3. Необязательно: Список элементов через запятую для замены удаленных элементов на

Использовать forEach ()

Если вы хотите сохранить цикл для выполнения других итерируемых действий, используйте цикл forEach и проверьте, больше ли index, чем 10. Например:

function testArray() {

  var arr = ['Sh1','Sh2','Sh3','Sh4','Sh5','Sh6','Sh7','Sh8','Sh9','Sh10','Sh11','Sh12'];

  var res = [];

  arr.forEach(function (element,index) {

    if(index>9) {
      res.push(element); //push to test Array;

      //iterable code goes here;
    }

  });

  Logger.log(res); //should log ['Sh11','Sh12']
}

Обратите внимание, что функция обратного вызова forEach принимает три аргумента:

  1. Требуется: Элемент массива для итерации;
  2. Необязательно: индекс на основе 0 элемента, в данный момент зацикленного;
  3. Необязательно: Массив, по которому выполняется цикл;

Пожалуйста, обратитесь к документации forEach loop по MDN , чтобы лучше понять, как работает этот метод Array. Также воздержитесь от использования цикла for...in в тех случаях, когда важен порядок итерации.

Кстати, вам не нужно останавливать итерацию после того, как в Array больше не будет Sheet экземпляров, любой цикл завершится сам, цикл завершится после завершения шага над последним элементом Array.

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