要重命名的脚本&根据表重新排序表

时间:2016-12-20 07:35:39

标签: javascript loops google-apps-script google-sheets

问题1。

我尝试编写一个脚本,根据其中一张表格中的表格重命名和重新排序Google电子表格中的工作表。我已经尝试了几个小时的不同方法让它工作无济于事。 (我仍然试图摆脱循环)

此脚本将放在一张表格中,我将与其他可能会意外重新排序或可能重命名表格的人分享。

我已经包含了当前代码和示例文件。

注意:工作表名称将完全不同,并且无法按字母顺序排序。

function OnOpen(){

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();

 for( var i in sheets )
  if(sheets[i].getSheetId() == '978626951'){
  var sheet = ss.getSheets()[i];
   break;
 }

 var sheetData = sheet.getRange(2,1,11,3).getValues();

        for (var a = 0; a < sheetData.length; a++) {
            for (var b = 0; a < sheetData.length; b++){

    var find = sheetData[a][0]; Logger.log(sheets[a].getSheetName());                 

        if(find == sheets[a].getSheetId()) {        
    var temp = ss.getSheets()[a].activate(); 
               ss.moveActiveSheet(sheetData[a][2]);

    }  
   }  
  }
 }

Link 使用脚本对电子表格进行示例。

问题2

根据W3schools,可以从循环内部增加循环。 (代码格式W3)

var i = 0;
var len = cars.length;
for (; i < len; ) { 
    text += cars[i] + "<br>";
    i++;
} 

然而,当我尝试在Google Script中执行此操作时,调试器会挂起,我必须刷新。这在谷歌脚本中是不可能的?

任何帮助都会有很大的帮助。

1 个答案:

答案 0 :(得分:0)

我稍微修改了你的代码,它现在似乎有用了:

function onOpen(){

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();

  for( var i in sheets )
    if(sheets[i].getSheetId() == '978626951'){
      var sheet = sheets[i]; // reuse the var sheets
      break;
    }


  //I USED COMMENTED CODE BELOW SINCE I NEEDED TO FIND THE SET OF SHEET IDS FOR MY TEST SPREADSHEET; SO ITS NOT REQUIRED TO RUN ONCE IDs ARE FOUND
  //sheet.appendRow(['-'])
  //  for( var x in sheets)
  //    sheet.appendRow([sheets[x].getSheetId(), sheets[x].getSheetName() ] );
  //  


  var sheetData = sheet.getRange(2,1,11,3).getValues();

  for (var a = 0; a < sheetData.length; a++) {    
    var find = sheetData[a][0]; 

    for(var b = 0 ; b < sheets.length; b++){
      if(find == sheets[b].getSheetId() ) {
        Logger.log(sheets[b].getName());

        sheets[b].activate(); // not : ss.getSheets()[a] 
        ss.moveActiveSheet(sheetData[a][2]);
        sheets[b].setName(sheetData[a][1]); // I added this rename bit

      } 
    } 
  }
}

(但请注意,对我来说,我甚至还必须在打开工作表后刷新ss(即浏览器中的F5) - 看起来脚本会对电子表格进行更改,但它们不会显示在页面上直到我刷新)

我尝试了此电子表格中的代码:https://docs.google.com/spreadsheets/d/1W7IiEQgsHlWFm7EThyN3lcY6duKh9EW2sQDYFqbwID8/edit?usp=sharing

你的Q2: 这在Google Apps脚本中运行良好:

function myFunction() {
  var cars = 'cars', text = '';
  var i = 0;
  var len = cars.length;
  for (; i < len; ) { 
    text += cars[i] + "<br>";
    i++;
  } 
  Logger.log(text)
}