如何从Google App脚本执行中排除前10张纸?

时间:2019-05-27 23:50:04

标签: google-apps-script

此脚本在此处循环遍历工作表名称,并更改名称以匹配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 :(得分:0)

使用splice()

由于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,以获取详细说明。简而言之,此方法接受无限量的参数:

  1. 必需:从0开始的索引;
  2. 可选:从0开始的结束索引(如果未提供或大于调用该方法的Array的长度,则从开始索引开始删除所有元素); < / li>
  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循环documentation on MDN,以更好地理解此Array方法的工作方式。另外,请避免在迭代顺序相关的情况下使用for...in循环。

顺便说一句,在Sheet中不再有Array个实例之后,您无需停止迭代,任何一个循环都会终止自身,循环将在最后一个Array结束后终止元素。

答案 1 :(得分:0)

代替使用for(var s in allsheets){

用户for(var s=10;i<allsheets.length;i++) {