是否有 Google 脚本命令来重新加载 Google 边栏?

Is there a Google Script command to reload a Google Sidebar?

我写了一个 Google 脚本,可以将工作表(即标签)按 alpha 顺序放入 Google 电子表格中。

问题是电子表格页面底部的水平选项卡列表未按字母顺序(从左到右)显示。

开始时作为“firstSheet”的选项卡通常会在脚本 运行 位于“包”中间的某处后结束,字母顺序将从那里开始并“环绕”直到alpha 列表中的最后一个选项卡就在它之前。 (我说“一般”是因为有时它确实会一直出现在左边——这取决于它开始的位置。)

我还应该提到脚本绑定到电子表格并由用户作为自定义菜单项触发。

我使用的基本脚本来自@Serge-insas ()。我对该脚本所做的唯一真正的修改是添加一行以在过程结束时显示第一个 alpha 选项卡。

我还在整个事件中添加了一个侧边栏作为上述“环绕”问题的解决方法,因为我发现侧边栏有一个右键单击“重新加载”选项,它会重新加载电子表格,并且重新加载以正确的字母顺序从左到右显示选项卡。

菜单脚本

function onOpen() {
   var ui = SpreadsheetApp.getUi();
   ui.createMenu('Custom')
      .addItem('Sort Sheets', 'sortSheets')
      .addToUi();

函数

function sortSheets () {
 var html = HtmlService.createHtmlOutputFromFile('index')
      .setTitle('Read Me')
      .setWidth(300);
  SpreadsheetApp.getUi()
      .showSidebar(html);  var ss = SpreadsheetApp.getActive();
  
  var sheets = ss.getSheets();
  var firstSheet = sheets[0].getName();
  var numSheets = ss.getNumSheets();
  var sheetNameArray = [];
    for (var i = 0; i < numSheets; i++) {     
      sheetNameArray.push(sheets[i].getName());
    }
  var sheetNameArray = sheetNameArray.sort(); 
  for(var s=0 ; s < numSheets ; s++){    
    ss.setActiveSheet(ss.getSheetByName(sheetNameArray [s]));
    SpreadsheetApp.flush();
    Utilities.sleep(50);
    ss.moveActiveSheet(numSheets);
    SpreadsheetApp.flush();
    Utilities.sleep(50);
  }
  ss.setActiveSheet(ss.getSheetByName(firstSheet));
}

html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
  
      <center><font color = red>IMPORTANT<br><br> 
    Once the routine has run (i.e., the tabs stop moving around) and you see the "saved" notification at the top of the page...<br><br>
     
     Right click anywhere in this sidebar. Then select the "reload" menu item to reset sheet tabs in alpha order.</center></font> <br> <br>
  </body>
</html>

所以我的问题是:除了侧边栏之外,还有其他方法可以让重新加载发生吗?即,是否有一些命令可以在我的脚本中使用,而不必使用相当复杂的侧边栏方法?侧边栏中有重新加载功能这一事实让我希望以编程方式获得它,虽然搜索 Google GAS 文档,但我找不到。

看起来您的代码应该可以工作。不知道为什么不是。但是,这是订购床单的更简单方法。

function sortSheets()
{
  // get the current spreadsheet
  var ss = SpreadsheetApp.getActive();

  // get an array of sheets
  var allSheets = ss.getSheets();

  // sort the array by sheet name
  allSheets.sort(function(s1, s2){
    if(s1.getName().toLowerCase() < s2.getName().toLowerCase()) return -1;
    if(s1.getName().toLowerCase() > s2.getName().toLowerCase()) return 1;
    return 0;
  });

  // move the sheet into where they should be based on sorted order
  allSheets.forEach(function(sheet, sheetIndex){
    ss.setActiveSheet(sheet);
    ss.moveActiveSheet(sheetIndex + 1);
  });
}