我有一张工作表,它根据一组目标跟踪学生的进步-顶部的学生姓名,左侧列出的目标。每个学生都在一个组中-在下面的示例中,这些组由SK,IO和NU表示。
我创建了带有各种过滤器的侧边栏。
我遇到的问题是过滤器,用户将在其中输入组名,单击过滤器按钮时,除包含所输入组名的列外,所有列均将隐藏。我有以下代码:
.gs工作表中的
:function showGroup(group) {
for(var i=2; i<lastCol-36; i++) {
if(data.getCell(8, i).getValue() != group) {
sheet.hideColumns(i);
}
}
}
来自html表:
<form id="filterGroups" >
<input type="text" value="" id="groupName">
<input type="button" value="Filter"
onclick="google.script.run.showGroup(filterGroups)" />
最接近成功的是隐藏所有列,只要表单ID与传递给google.script.run的参数匹配即可。
答案 0 :(得分:0)
如果我对您的问题的理解是正确的,那么此修改如何?
SK, NU
,则if(data.getCell(8, i).getValue() != group){}
始终为false。name="groupName"
的名称。使用它,它在GAS端使用group.groupName
检索值。
group[""]
检索值。sheet.hideColumns(i)
时,过程成本很高。因此,我根据您的情况使用了Sheets API。
function showGroup(group) {
var unhide = group.groupName.split(",").map(function(e){return e.trim().toUpperCase()});
var values = sheet.getRange(8, 2, 1, (lastCol - 36) - 2).getValues()[0];
var template = {updateDimensionProperties:{properties:{},range:{sheetId:sheet.getSheetId(),dimension:"COLUMNS"},fields:"hiddenByUser"}};
var r = values.map(function(e, i) {
var t = JSON.parse(JSON.stringify(template));
if (~unhide.indexOf(e)) {
t.updateDimensionProperties.properties.hiddenByUser = false;
} else {
t.updateDimensionProperties.properties.hiddenByUser = true;
}
t.updateDimensionProperties.range.startIndex = i + 1;
t.updateDimensionProperties.range.endIndex = i + 2;
return t;
});
Sheets.Spreadsheets.batchUpdate({"requests": r}, ss.getId());
}
的HTML
<form id="filterGroups" >
<input type="text" value="" id="groupName" name="groupName">
<input type="button" value="Filter" onclick="google.script.run.showGroup(filterGroups)">
</form>
SK, NU
时,仅显示带有SK, NU
的列。其他列被隐藏。如果我误解了您的问题,请告诉我。我想修改它。
关于您评论的Can you show me how to pass html form data to GAS functions?
,我向您展示了使用HTML表单的示例脚本。 HTML格式如下。
在此示例中,该值使用google.script.run()
发送到showGroup(filterGroups)
。
<form id="filterGroups" >
<input type="text" value="" id="groupName" name="groupName">
<input type="button" value="Filter" onclick="google.script.run.showGroup(filterGroups)">
</form>
加油站
在此示例中,group.groupName
检索了HTML表单中的值。
function showGroup(group) {
Logger.log(group.groupName)
}