Прежде всего, избавьтесь от ненужных звонков - вы рассматривали splice()
часть моего ответа на свой предыдущий вопрос?
allsheets.splice(0,10); //0-based start and end indexes;
Если с исключенными именами листов можно встретиться где-либо, сохраните ваши операторы exclude
Array и if
(кстати, в вашем образце, похоже, опечатка - в объявлении Array
пропущена открывающая скобка).
Независимо от того, как вы исключаете свои первые 10 листов, вызов остановки итерации становится излишним, когда вы вызываете getName()
метод allsheets.length
раз (таким образом, 150 ненужных вызовов метода) - вместо этого обращайтесь к переменной newName
.
Вы можете дополнительно уменьшить количество вызовов, проверив условие перед вызовом метода setName()
(при условии, что вы не хотите ничего делать, если новое имя в exclude
Array).
Затем используйте цикл for
для выполнения тех же манипуляций (обратите внимание, что в случае фильтрации Array
с использованием splice()
индекс s
должен быть 0
):
for(var s=10; s<allsheets.length; s++) {
var sheet = allsheets[s];
var oldName = sheet.getName();
var newName = sheet.getRange(1,1).getValue();
//this reduces setName() calls if you don't need to set reserved names;
if(exclude.indexOf(newName)!==-1) { continue; }
if (newName.toString().length>0 && newName !== oldName) {
sheet.setName(newName);
}
}
В качестве альтернативы, вы можете использовать forEach
для выполнения желаемых манипуляций. Вот так будет выглядеть вся функция с использованием splice()
и forEach()
:
function testArray() {
var ss = SpreadsheetApp.getActive();
var arr = ss.getSheets();
arr.splice(0,10); //removes first 10 Sheets from Array;
var exclude = []; //fill with unchangeable names;
arr.forEach(function (sheet,index) { //iterates over Array of Sheets;
var oldName = sheet.getName();
var newName = sheet.getRange(1,1).getValue();
if(newName.toString().length>0 && newName!==oldName) {
//Move to next iteration if new name should be excluded;
if(exclude.indexOf(newName)===-1) {
sheet.setName(newName); //set name otherwise;
}
}
}); // end of loop
} // end of function