首页 > 解决方案 > 在 Google 表格的侧边栏中对索引进行排序

问题描述

我正在使用以下脚本在 Google 表格中创建侧边栏。此侧边栏是此电子表格中所有非隐藏选项卡(工作表)的索引

我希望这个索引按字母顺序排序。

function showSidebar() {
  var ui = HtmlService.createTemplateFromFile('sidebar.html')
  .evaluate()
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setTitle('Index Sidebar');
  
  SpreadsheetApp.getUi().showSidebar(ui);
}

function getSheetNames() {
  
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  
  return sheetNamesIds(sheets);
}

function sheetNamesIds(sheets) {
  
  var indexOfSheets = [];
  
  sheets.forEach(function(sheet){
    if(sheet.isSheetHidden()!= true)indexOfSheets.push([sheet.getSheetName(),sheet.getSheetId()]);
    
  });
  
  return indexOfSheets; 
}


function returnListItems(text) {
  
    var sheetNames = getSheetNames()
    
    // Checking if there is a search term
    if (text) {
      sheetNames = sheetNames.filter(n => n[0].includes(text))
    }
    
    var htmlString = sheetNames.map(function(d) {
        var string = `
        <li> 
          <input
           type="button"
           value="${d[0]}"
           onclick=\"google.script.run.setActiveByName('${d[0]}')\"/>
        </li>
        `
        return string }).join(' ')
    
    return htmlString
}

function setActiveByName(name) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(name)
  SpreadsheetApp.setActiveSheet(ss)
}

任何想法如何..?

标签: google-apps-scriptgoogle-sheets

解决方案


我相信你的目标如下。

  • 您想按字母顺序对数组的工作表名称从getSheetNames().
    • I would like this Index sorted alphabetically.,我以为你想达到上面的目标。

在您的情况下,我想对sheetNamesIds().

从:

function sheetNamesIds(sheets) {
  
  var indexOfSheets = [];
  
  sheets.forEach(function(sheet){
    if(sheet.isSheetHidden()!= true)indexOfSheets.push([sheet.getSheetName(),sheet.getSheetId()]);
    
  });
  
  return indexOfSheets; 
}

至:

function sheetNamesIds(sheets) {
  
  var indexOfSheets = [];
  
  sheets.forEach(function(sheet){
    if(sheet.isSheetHidden()!= true)indexOfSheets.push([sheet.getSheetName(),sheet.getSheetId()]);
    
  });
  
  indexOfSheets.sort((a, b) => a[0] > b[0] ? 1 : -1);  // Added

  return indexOfSheets;
}
  • 在这种情况下,工作表名称按升序排序。

参考:


推荐阅读