在电子表格中获取一系列工作表并列出它们?

时间:2015-10-08 09:04:00

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

我正在尝试创建一个动态依赖的下拉列表,为此我希望有一些依赖层:首先在工作表之间选择,然后在列之间选择,然后在行之间选择。我现在有一个脚本现在在Google Apps脚本中的模板化HTML文件中运行,如下所示:

<?
var sheet   =  SpreadsheetApp.openById("1c7IwmyBrbNq5xwzo-7EyFewCx31WpfP4EzLpkHawffI").getSheetByName("test");
var lastRow = sheet.getLastRow();  

var categoryRange = sheet.getRange("C2:C"+lastRow); 
var category    = categoryRange.getValues();
?>

Category:  <select name="category">
<? for (var i = 0; i < category.length; ++i) { ?>
<option><?!= category[i] ?></option>
<? } ?>
</select>
<br/>

我现在要做的是获取一个数组或某个给定电子表格中所有工作表的列表,然后在下拉列表中列出这些工作表的名称。

从那里我将不得不找到一种制作依赖关系的方法,但是下拉列表中的选定工作表会为下一个下拉菜单设置工作表吗?

2 个答案:

答案 0 :(得分:1)

要在HTML中使用,最佳做法是加载页面,运行一个返回所需信息的函数,然后从该构造中获取HTML,这里是服务器端函数:

id: 1 void someTemplate<T, U, V>::myFunction() const [with T = int; U = int; V = char]
id: 2 void someTemplate<T, U, V>::myFunction() const [with T = char; U = int; V = char]
id: 3 void someTemplate<T, U, V>::myFunction() const [with T = double; U = double; V = int]
id: 4 void someTemplate<T, U, V>::myFunction() const [with T = int; U = int; V = char]
id: 5 void someTemplate<T, U, V>::myFunction() const [with T = int; U = int; V = float]

如果需要帮助从HTML调用服务器端功能,请阅读最佳实践:

https://developers.google.com/apps-script/guides/html/best-practices#load_data_asynchronously_not_in_templates

答案 1 :(得分:0)

好的,在用户 Kriggs 的帮助下,将表单推送到某些列表的解决方案如下:

<强> page.html中

<p>List of things:</p>
<ul id="things">
<li>Loading...</li>
</ul>

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js">
</script>

<script>
// The code in this function runs when the page is loaded.
$(function() {
google.script.run.withSuccessHandler(showThings)
  .getSheetsNames();
});

function showThings(sheetsName) {
var list = $('#things');
list.empty();
for (var i = 0; i < sheetsName.length; i++) {
list.append('<li>' + sheetsName[i] + '</li>');
}
}
</script>

<?!= include('JavaScript'); ?>

<强> JavaScript.html

 <script>
 window.addEventListener('load', function() {
 console.log('Page is loaded');
 });
 </script>

<强> Code.gs

 function doGet(request) {
 return HtmlService.createTemplateFromFile('Page')
  .evaluate()
  .setSandboxMode(HtmlService.SandboxMode.IFRAME);
 }

 function include(filename) {
 return HtmlService.createHtmlOutputFromFile(filename)
  .getContent();
 }


 function getSheetsNames(){
 var ss   =  SpreadsheetApp.openById("Spreadsheet ID here");
 var sheetsName = [];
 var sheets = ss.getSheets();
 for( var i = 0; i < sheets.length; i++ ){
  sheetsName .push(sheets[i].getName() )
 };
 return sheetsName;
 }

以上所有内容将生成Page.html,其中将创建电子表格中所有工作表的列表。这对我来说真的很有用,希望每个人都可以使用它。我将继续研究如何进行依赖的dropwdown:)