如何在侧边栏的下拉列表中获取所有工作表的列表

时间:2019-08-29 12:45:03

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

我正在Google工作表的侧边栏菜单中设置脚本中需要的一些变量。

我的脚本已在运行。 很简单,在表单提交时,它将在我的日历中创建一个事件。

但是,为了简化脚本的安装,我想在边栏中显示一个下拉列表,其中包含工作表中所有工作表的名称。

我看到了各种各样的帖子,它们显示了如何执行像这样的下拉列表:

但这不是我的问题,我的问题是如何获取工作表列表并将其放入下拉列表中。

感谢您的帮助,

function onOpen() {

  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

  var entries = [{name: "Sync Calendar Now", functionName: "syncActive"}];

  entries.push(null); // adding line separator
  entries.push({name: "Settings", functionName: "paramID"});


  spreadsheet.addMenu(sheetName, entries);

};


function paramID() {
  //TODO : Mettre ID calendrier ici :)

  var html = HtmlService.createHtmlOutputFromFile('SideBar')
      .setTitle('My custom sidebar')
      .setWidth(300);
  SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
      .showSidebar(html);
}

这是我如何获取工作表的列表名称

function getListNames(){

  var out = new Array()
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  for (var i=0 ; i<sheets.length ; i++) out.push( sheets[i].getName() )
  Logger.log(out);
  return out  
}

例如,我的工作表中包含:工作表1,工作表2,工作表3

打开侧边栏时,我想显示一个带有以下内容的下拉列表:表格1,表格2和表格3

编辑:接下来,我要返回选择的值。

1 个答案:

答案 0 :(得分:1)

您可以使用scriptlets

这使您可以在html代码中使用Apps脚本功能:

  <body>
    <select name="Available sheets" onchange="myJsFunction()")>
    <? var sheets=spreadsheet.getSheets(); ?>
    <? for(var i=0;i<sheets.length;i++) { ?>
      <option value=<?=sheets[i].getName()?>> <?= sheets[i].getName()?></option>
    <? } ?>
    </select>
  <script>
   function myJsFunction(){
     var name=document.getElementsByName("Available sheets")[0].value;
     google.script.run.goToSheet(name);
    };
  </script>
  </body>

google.script.run允许您将选定的工作表传递给Apps脚本功能。

然后,在.gs文件中,您需要根据所选工作表在Apps脚本函数中定义要执行的操作,例如:

function goToSheet(selectedSheetName){
  Logger.log('The selected sheet is: '+ selectedSheetName);
  }

此外,您需要更改行var html = HtmlService.createHtmlOutputFromFile('SideBar')

var html = HtmlService.createTemplateFromFile('SideBar').evaluate()

允许脚本评估scriptlet的内容。