此脚本在此处循环遍历工作表名称,并更改名称以匹配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
答案 0 :(得分:0)
由于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()
方法的documentation on MDN,以获取详细说明。简而言之,此方法接受无限量的参数:
Array
的长度,则从开始索引开始删除所有元素); < / li>
如果希望保留循环以执行其他可迭代的操作,请使用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
循环回调函数接受三个参数:
请参考forEach
循环documentation on MDN,以更好地理解此Array
方法的工作方式。另外,请避免在迭代顺序相关的情况下使用for...in
循环。
顺便说一句,在Sheet
中不再有Array
个实例之后,您无需停止迭代,任何一个循环都会终止自身,循环将在最后一个Array
结束后终止元素。
答案 1 :(得分:0)
代替使用for(var s in allsheets){
用户for(var s=10;i<allsheets.length;i++) {