Google 表格脚本:在电子表格中按字母顺序对表格进行排序

Google Sheets Script: Sort sheets alphabetically within a spreadsheet

我发现了一个旧的帮助表单,其中电子表格中的 script is shared to organize sheets 使用 javascript。脚本如下:

function copyAllSheetsToAnotherSpreadsheetInAlphabeticalOrder() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sourceName = ss.getName();
  var sourceSheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var targetName = "Sheets alphabetized - Copy of " + sourceName;
  var sheetNumber, sourceSheet, sheetName;
  var sheetAlphaArray = new Array();

  // create a new empty target spreadsheet
  var targetSpreadsheet = SpreadsheetApp.create(targetName);
  var targetUrl = targetSpreadsheet.getUrl();

  // iterate through all sheets in the source spreadsheet to collect their names and numbers
  for( sheetNumber = 0; sheetNumber < sourceSheets.length; sheetNumber++) {
    sheetAlphaArray[sheetNumber] = new Array(2);
    sheetName = sourceSheets[sheetNumber].getName();
    // we will sort the array by the sheet name so it needs to be the first element
    sheetAlphaArray[sheetNumber][0] = sheetName;
    // need to keep track of sheet numbers so that we can find the sheets
    // in alphabetical order from the sourceSheets array, place it in the second element
    sheetAlphaArray[sheetNumber][1] = sheetNumber;
  }

  // sort the sheet names array in ascending alphabetic order
  sheetAlphaArray.sort();

  // iterate through all sheets in the source spreadsheet by sheet name in alphabetic order
  //
  // new sheets are always added to the first position, so the sheets need to be added
  // last sheet first, first sheet last, otherwise they would appear in reverse order
  for( sheetNumber = sourceSheets.length - 1; sheetNumber >= 0; sheetNumber-- ) {

    // copy next sheet in reverse alphabetical order from the source spreadsheet to target spreadsheet
    sourceSheet = sourceSheets[ (sheetAlphaArray[sheetNumber][1]) ];
    sourceSheet.copyTo(targetSpreadsheet);
  }

  // done, tell user where to find the new spreadsheet
  Browser.msgBox("Spreadsheet copied with sheets in alphabetical order. " +
                 "Target name: " + targetName + ". " +
                 "Target URL: " + targetUrl ) + ".";
}

在 运行 脚本之后,几个页面似乎按字母顺序排序,但在滚动浏览已排序的页面后,还有一堆未排序。前 15 个已排序,然后是 21 个未排序。

我意识到问题与 JavaScript 的 .sort() 函数以不同方式处理大写单词和小写单词有关。所以我修改了:

sheetName = sourceSheets[sheetNumber].getName();

成为:

sheetName = sourceSheets[sheetNumber].getName().toLowerCase();

进行此更改后,新排序的电子表格似乎一切都井井有条。