格式如下:https : //script.google.com/macros/s/AKfycbwTGqZqLTAsOpSweMn0xgHP0sOJPsFg5ZShC1HqzVoDoNi5h5Y/exec
我正在尝试从此工作表的列中动态更新选项列表:https : //docs.google.com/spreadsheets/d/1_LSdBkvw5Z6L4ZQP5qZccLEfekNVRCeKQRLLb9Vm4eM/edit#gid=285745421
我在这里使用“ Ziganotschka”提供的解决方案:如何根据所附电子表格中的列自动填充表单选项
该代码没有给出任何错误,但由于某种原因,它仍然以表格形式提供了一个空的选项列表
提前致谢
代码
function createInnerHTML()
{
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("CHOICES");
var namesValues = names.getRange(2, 2, names.getMaxRows() -
1).getValues();
var InnerHTML = [];
for (var i=0;i<namesValues.length;i++){
InnerHTML.push('<option value="OPTION '+(i+1)+'>' + namesValues[i][0]+ '</option>');
};
InnerHTML.join('');
return InnerHTML;
}
index.html
<div class="ss-q-title">JOINT
<span class="ss-required-asterisk" aria-hidden="true">*</span></div>
<? var innerHTML= createInnerHTML(); ?>
<div>
<select name="JOINT" id="JOINT" aria-label="JOINT " aria-required="true" required="">
<option value=""></option>
//HERE the inner HTML will be inserted
<?= innerHTML?>
</select>
</div>
问题
通过打印脚本片段,您只需将带有选项的HtmlStrings添加为文本内容(如果您在控制台中检查元素,您将看到所有选项都存在)。UPD:顺便说一句,TheMaster的解决方案更易于实施。
解
许多可能的解决方案之一是将选项对象数组返回模板并遍历每个对象,从而动态地形成标签:
服务器端
function createInnerHTML() {
var ss = SpreadsheetApp.getActive();
var names = ss.getSheetByName("CHOICES");
var namesValues = names.getRange(2,2,names.getMaxRows()-1).getValues();
var innerHTML = [];
for (var i=0;i<namesValues.length;i++){
innerHTML.push({value:'OPTION '+(i+1), text:namesValues[i][0]});
};
return innerHTML;
}
客户端
请注意,<div>
为清楚起见,此示例省略了元素和任何其他包装。
<? var innerHTML= createInnerHTML(); ?>
<select name="JOINT" id="JOINT" aria-label="JOINT" aria-required="true" required="">
<option value=""></option>
<? innerHTML.forEach(function(option) { ?>
<option value="<?= option.value ?>"><?= option.text ?></option>
<? }); ?>
</select>
其他修改
我建议从切换到getMaxRows()
,getLastRow()
因为脚本返回296个选项,其中大多数为空白,并且仅由于行为空而设置了值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句