【问题标题】:Script to rename & reorder sheets based on table基于表格重命名和重新排序工作表的脚本
【发布时间】:2016-12-20 07:35:38
【问题描述】:

问题 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 使用脚本的电子表格示例。

第二个问题

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

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 问题 1:不完全确定您在问什么。您是否设法使其工作但遇到问题?问题 2:您的浏览器可能由于无限循环而挂起。使用 console.log() 跟踪变量 i 的值。

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


【解决方案1】:

我稍微修改了你的代码,现在似乎可以工作了:

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

您的第二季度: 这在 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)
}

【讨论】:

  • 谢谢大卫..它确实有效,我想我在发布问题之前确实开始工作了,我只需要刷新 ss(我没有这样做)才能真正看到脚本正在工作.
猜你喜欢
  • 2014-06-21
  • 2019-11-16
  • 2023-03-29
  • 2019-08-05
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多