从Google表格中的GAS <select>获取名称列?

时间:2015-10-09 16:23:22

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

我正在开发一个GAS驱动的依赖下拉列表,由于所有这些,我现在已经非常接近stackoverflow的帮助。 但是我已经到了缺乏文件的地步?或回答。 我试图按名称获取一个特定的列,我发现该列具有某个输入的标题/顶行值。在这种情况下,它是在HTML页面上运行的下拉列表,与GAS说话。 大多数脚本都运行得很好,它构成了我在HTML和Code.gs的主题中所谓的主题,这给我带来了一些麻烦。现在它还没有得到专栏,但那是因为我还没有找到办法。现在不能正常工作的部分是:HTML中的函数buildTopicsList(rowsName)和Code.gs中的函数getTopics(subCategories,categories) 在这里,我希望使用&#34;标题&#34;获取列中的所有行。从html中的下拉列表中选择。 完整的HTML看起来像这样: 的index.html &LT; DIV&GT; &lt; select id =&#34; categories&#34;平变化=&#34; google.script.run.withSuccessHandler(buildSubCategoriesList) .getSubCategories(THIS.VALUE)&#34;&GT; &LT;选项的载量...&LT; /选项&GT; &LT; /选择&GT; &lt; select id =&#34; subCategories&#34;平变化=&#34; google.script.run.withSuccessHandler(buildTopicsList)  .getTopics(THIS.VALUE)&#34;&GT;   &LT;选项的载量...&LT; /选项&GT; &LT; /选择&GT; &lt; select id =&#34; topic&#34;&gt;   &LT;选项的载量...&LT; /选项&GT; &LT; /选择&GT; &LT; / DIV&GT; &lt; script src =&#34; // ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> &LT;脚本&GT; //此函数中的此代码在加载页面时运行。 $(function(){ google.script.run.withSuccessHandler(buildCategoriesList).getCategories(); }); function buildCategoriesList(sheetsName){ var list = $(&#39; #category&#39;); list.empty(); for(var i = 0; i&lt; sheetsName.length; i ++){ list.append(&#39;&lt; option value =&#34;&#39; + sheetsName [i] +&#39;&#34;&gt;&#39; + sheetsName [i] +&#39 ;&LT; /选项&GT;&#39); } list.trigger(&#34;变更&#34); } function buildSubCategoriesList(columnsName){ 的console.log(columnsName); var list = $(&#39; #subCategories&#39;); list.empty(); for(var i = 0; i&lt; columnsName.length; i ++){ list.append(&#39;&lt;选项值=&#34;&#39; + columnsName [i] +&#39;&#34;&gt;&#39; + columnsName [i] +&#39 ;&LT; /选项&GT;&#39); } list.trigger(&#34;变更&#34); } function buildTopicsList(rowsName){ 的console.log(rowsName); var list = $(&#39;#topics&#39;); list.empty(); for(var i = 0; i&lt; rowsName.length; i ++){ list.append(&#39;&lt;选项值=&#34;&#39; + rowsName [i] +&#39;&#34;&gt;&#39; + rowsName [i] +&#39 ;&LT; /选项&GT;&#39); } } &LT; /脚本&GT; 和代码: Code.gs var ss = SpreadsheetApp.openById(&#34; 1BK5urtTzqZ2kc89ZnbeMSIm2-bt4KLNTQghsxn0cXBI&#34;); function doGet(request){ return HtmlService.createTemplateFromFile(&#39; index&#39;)   。评估()   .setSandboxMode(HtmlService.SandboxMode.IFRAME); } function include(filename){ return HtmlService.createHtmlOutputFromFile(filename).getContent(); } function getCategories(){ var sheetsName = []; var sheets = ss.getSheets(); for(var i = 0; i&lt; sheets.length; i ++){ sheetsName.push(sheets [i] .getName()) } return sheetsName; } function getSubCategories(categories){ var columnsName = []; var sheet = ss.getSheetByName(categories); var subRange = sheet.getRange(1,1,1,sheet.getLastColumn()); var columns = subRange.getValues()[0]; for(var i = 0; i&lt; columns.length; i ++){ columnsName.push(columns [i]) } return columnsName; } //这里不起作用: function getTopics(subCategories,categories){ var rowsName = []; var sheet = ss.getSheetByName(categories); var topRange = sheet.getRange(1,1,1,sheet.getLastColumn()); var rows = topRange.getValues()[0]; for(var i = 0; i&lt; rows.length; i ++){ rowsName.push(rows [i]) }  return rowsName; } 有什么建议?

1 个答案:

答案 0 :(得分:0)

"SELECT * FROM works WHERE 122 IN(task_key)"; 属性调用服务器函数getTopics(subCategories,categories)

onchange

.getTopics(THIS.VALUE)&#34;

onchange="google.script.run.withSuccessHandler(buildTopicsList) 正在传递给this.value函数。但getTopics(subCategories,categories)函数接受两个参数,而不是一个参数。第一个参数getTopics(subCategories,categories)永远不会在代码中使用。这就是为什么你没有得到任何东西。在subCategories函数的顶部添加Logger.log('categories: ' + categories);语句,我打赌它没有显示任何内容。

作为&#34;旁注&#34;。 getTopics(subCategories,categories)函数使用doGet()方法,但 index.html 文件中没有scriptlet。 index.html 文件不是模板。如果您使用的是模板,则在加载html时,您无需运行某些浏览器代码。我并不是说使用scriptlet或建议你这样做会更好。但我只是想让你知道发生了什么以及你的选择是什么。